1. 程式人生 > >MySQL使用IN代替OR的原因

MySQL使用IN代替OR的原因

對於許多資料庫伺服器而言,IN()列表不過是多個OR語句的同義詞而已,因為IN和OR在邏輯上是等同的。不僅是在MySQL資料庫伺服器,對於許多其他的資料庫伺服器使用到IN查詢時,都是按照如下方式處理的:
[1] 對IN列表中的數值進行排序。
[2] 對於查詢的匹配,每次使用二分查詢去匹配IN列表的數值。
所以對於第[2]步,每次比較的演算法複雜度大概為O(log n)。相反,對於同樣邏輯的OR列表,每次都要遍歷,所以OR相應的演算法複雜度為O(n)(因此對於遍歷非常大的OR列表,會很緩慢!)。

因此,在瞭解了IN和OR的區別之後,每次優化,我們可以採用如下方式:
1.儘量將能使用IN來代替OR查詢。
2.對IN列表中的資料,寫SQL的時候排好序,避免MySQL來做這個工作。

轉載自:http://blog.chinaunix.net/uid-20708886-id-4064033.html