2010-01-27 73 views

回答

70

爲了什麼目的?

  • 最快爲一個IF將IF EXISTS (SELECT * FROM Table)...
  • 對於結果集,SELECT TOP 1 1 FROM Table返回零個或一個行
  • 對於正好一個行與計數(0或非零),SELECT COUNT(*) FROM Table
26

此外,您還可以使用exists

select case when exists (select 1 from table) 
      then 'contains rows' 
      else 'doesnt contain rows' 
     end 

,或者檢查是否有特定記錄的子行:

select * from Table t1 
where exists(
select 1 from ChildTable t2 
where t1.id = t2.parentid) 

或在過程

if exists(select 1 from table) 
begin 
-- do stuff 
end 
+0

使用情況......何時和/或是否可能比不使用這些更慢一點。 – Sasa 2016-12-14 14:19:59

1

燦」你只需要使用select count(*) from table(或索引列而不是*來計數行,如果s peed是重要的)?

如果不是那麼也許this article可以指向你在正確的方向。

7

像其他的說,你可以使用類似的東西:

IF NOT EXISTS (SELECT 1 FROM Table) 
     BEGIN 
     --Do Something 
     END 
    ELSE 
     BEGIN 
     --Do Another Thing 
     END 
0

爲了獲得最佳性能,使用特定的列名,而不是*的 - 例如:

SELECT TOP 1 <columnName> 
FROM <tableName> 

這種情況的原因,而不是返回列的整個列表,它返回只有一個是最優的。這可以節省一些時間。

此外,如果有任何值返回第一行,使其更快。其實你只有一個值 - 如果有任何行,或者沒有行時沒有值。

如果以分佈式方式使用表(這很可能是這種情況),那麼僅將一個值從服務器傳輸到客戶端要快得多。

您還應該在所有列中明智地選擇從列中獲取數據,從而獲得儘可能少的資源。

相關問題