2010-09-27 29 views
10

我的想法是,如果我把我的ANDs篩選出的篩選出的篩選出的篩選出的篩選出的篩選出的篩選出更多的篩選結果,我的查詢應該運行得更快,之間和語句。爲了獲得最佳性能,在Where子句中使用ANDS的順序

但是,在SQL語句的WHERE子句中,AND的順序是否真的影響了SQL的性能,或者已經爲此優化了引擎?

回答

18

它確實取決於優化器。

不應該問題,因爲它的優化器的工作是找出無論你如何描述它來運行你的查詢最佳方式。

實際上,沒有優化器是完美的,所以您可能會發現重新排序子句確實會對特定查詢產生影響。唯一可以肯定的方法是用自己的模式,數據等自己測試它。

+0

有一個查詢我正在運行一個ilike語句,並且子句的順序很重要。 'select * from table where'abcde'and time> = 2015-12-28' is 10x slow'than select * from table where time> = 2015-12-28 and x ilike'abcde'' – 2015-12-29 09:11:56

6

大多數SQL引擎已經過優化,可以爲您完成這項工作。然而,我發現首先嚐試切割最大的桌子會產生很大的變化 - 這並不會造成傷害!

1

很大程度上取決於如何設置指數。如果存在組合這兩個鍵的索引,則優化器應該能夠通過單個索引搜索來回答查詢。否則,如果兩個鍵都存在獨立索引,優化器可能會獲得滿足每個鍵的記錄列表併合並列表。如果索引存在一個條件但不存在另一個條件,則優化器應首先使用索引列表進行過濾。在任何情況下,列出條件的順序都不重要。

如果沒有條件適用,則指定條件的順序可能會影響評估的順序,但由於數據庫將不得不提取每條記錄以滿足查詢,所以花費的時間可能會使得花在評估條件上的時間。