2010-08-18 91 views
1

我有一個關於性能和數據庫的問題。我使用MS SQL 2008.WHERE語句中的條件順序可以提高性能?

我想知道,如果WHERE語句中的條件順序可能會增加或減少SELECT操作的性能。 例子:

WHERE cnt.IsPublished = 1 
AND cnt.TypeContent = 'AR' 
AND cnt.ModeContent = 'AP' 
AND cnt.CategoryId = '7'; 

dfdfd

WHERE cnt.CategoryId = '7' 
AND cnt.TypeContent = 'AR' 
AND cnt.ModeContent = 'AP' 
AND cnt.IsPublished = ; 

謝謝你們

回答

1

內置的查詢優化器應該照顧這對你。但是,是的,如果查詢未被優化,則評估順序會由於短路而影響性能。

0

如果您的數據庫設置正確以收集表格內容的統計信息,那麼您的查詢優化器應該能夠輕鬆找出每個子條款的基數,並首先處理那些最能減少數據集(最高基數)的數據集。基數可以被認爲是一列中有多少個唯一值。

例如,如果有一百萬個不同的TypeContent值,但isPublished只有0或1,則查詢優化器應首先處理TypeContent子句。

但是這就是爲什麼數據庫調優不是「一勞永逸」的操作。數據庫的性能取決於模式,和表中保存的數據。這意味着過時的,不正確的統計數據實際上比沒有統計數據更差。至少在沒有統計數據的情況下,優化器不會使用它們。

如果數據屬性定期更改,則應定期調整。有關SQL Server 2008的特定統計信息,請參閱here,以及如何創建和維護它們。