2013-04-29 24 views
6

WHERE IN子句中的值的順序是否重要? (這是火鳥SQL如果是重要的)SQL中的項目順序:WHERE IN()很重要嗎?

如做:

where field1 in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 

提供的性能提升超過

where field1 in (3, 5, 10, 2, 1, 8, 6, 9, 4, 7) 
+0

我刪除了'delphi'標籤,因爲你的問題與Delphi完全無關。請僅使用實際適用於您問題的標籤;標籤的目的是將問題分類。謝謝。 – 2013-04-29 01:56:21

+0

我的猜測是,除非IN列表很大,否則在現代硬件上沒有明顯的差異,因爲在一天結束時必須有一個for循環,它將遍歷該列表的元素並將它們與字段值。 – 2013-04-29 01:59:40

+0

感謝您不確定for循環是否會導致不必要的索引遍歷,而且無論如何也無法對列表進行排序。 Thx – 2013-04-29 02:11:01

回答

1

是會,但可能在實現依賴性。 IN被處理爲順序OR,並且可以假定最可能的處理順序是寫入的。這就是說,我首先假定優化器將按照給定的順序處理元素,因爲這是最簡單的,並將它們排列在集合中,從最可能到最不可能。它不會傷害,並且很可能會有所幫助。這種差異是可衡量的還是顯着的是另一回事;衡量它,讓我們知道。

+0

我不確定它是否會迫使索引來回移動它已經檢查過的區域(比如分散的硬盤驅動器),或者它是否自行排序,因此我不需要花費時間排序。我將運行測試以找出答案。 – 2013-04-29 02:09:08

+0

似乎沒有明顯的差異,或者差異太小而無法在我做的測試中測量。 – 2013-04-30 05:29:01

+0

@ChrisValentine:毫不奇怪。如果這個集合變大了,我會把它放在一個查找表中,添加一個聚集索引,然後內聯到它。我相信SQL優化器總是可以比OR更有效地執行這樣的連接。畢竟,OR函數只是一個語法糖,對於一個集合來說太小而不能放在桌子上。 – 2013-04-30 05:33:50

相關問題