2016-10-17 6 views
1

テーブルBusiness(10,000行以上含む)とビット列ISBILLINGBUSINESSがあります。 ストアドプロシージャでは、レコードに対してISBILLINGBUSINESSがTrueかどうかを確認する必要があります。SQLサーバーIF EXISTSとIF条件Perfomance

私は2つの方法と比較できます。

(1)

IF EXISTS (SELECT id FROM BUSINESS WHERE ID = 5404 AND ISBILLINGBUSINESS = 1) 
select 'Billing Business' 

(2)

IF((SELECT ISBILLINGBUSINESS FROM BUSINESS WHERE ID = 5404) = 1) 
select 'Billing Business' 

私は、次の2つのメソッドのパフォーマンス賢明な違いを知ってほしいです。 どちらが良いですか?誰も助けることができますか?

+0

問合せ計画を確認してくださいは、(CTRL- L)。それらが同じであれば、違いはありません。データベースでパフォーマンスを望む場合は、索引の詳細を考え、コードがSARGableであることを確認してください。しかし、10K行の表では、索引としてのこの問題は使用されません。ビット列のインデックスだけは使用されません。 –

答えて

0

多分効果的なコード

declare @Boolbillbuss bit 
select @Boolbillbuss = ISBILLINGBUSINESS FROM BUSINESS WHERE ID = 5404 
IF(@Boolbillbuss=1) 
select 'Billing Business' 
0

10Kの行は、通常、パフォーマンス上の問題のためには小さすぎます。いずれにしても、パフォーマンス面では適切なインデックスを持つことが重要ですが、IF表現の形式はそれほど重要ではありません。

IDにユニークなインデックスがある場合、両方のバリアントは良好でほとんど同じです。

IDがユニークでクラスタ化インデックスを持つプライマリキーの場合、必要なものはすべて用意されています。

クラスタ化インデックスが異なる場合、またはこのテーブルにはクラスタ化インデックスが存在しない、クエリで参照されているすべての列が含まれてカバーインデックスを作成する場合:

CREATE UNIQUE NONCLUSTERED INDEX [IX_ID] ON [Business] 
(
    [ID] ASC 
) 
INCLUDE ([ISBILLINGBUSINESS])