2016-10-17 106 views
1

我有一個表Business(包含超過10,000行)與位列ISBILLINGBUSINESS。 在存儲過程中,我必須檢查ISBILLINGBUSINESS對於記錄是否爲真。SQL服務器IF EXISTS vs IF條件性能

我可以用兩種方法比較。

(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' 

我想知道以下兩種方法的性能高度差。 哪一個更好?誰能幫忙?

+0

檢查查詢計劃(CTRL- L)。如果他們是相同的,那麼沒有區別。如果您希望數據庫中的性能更多地考慮索引並確保您的代碼具有可搜索性。但是,在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])