2010-08-18 44 views
0

我有一組需要在mysql中進行比較的大值。使用IN或OR進行mysql優化

我可以知道哪個更快嗎? 例如:

Opt 1: 
SELECT * FROM table WHERE v = 1 or v = 2 or v = 3 or v = 4 or... v = 100 

Opt 2: 
SELECT * FROM table WHERE v IN (1,2,3,4,5,6,7,8,...,100) 

我可以知道哪個選項對於大值更快?有沒有更好的解決方案?謝謝。

回答

1

假設數字將不是連續,所述IN子句是優選的,原因有二:

  1. 更多可讀
  2. 優化運行比OR語句更快。
+0

IN列表已排序,因此查找可以作爲二分查找完成。一堆OR只是一次評估每個條件一個 ,直到一個匹配:http://lists.mysql.com/mysql/216945 – 2010-08-18 21:13:17

2

這些都是連續的數字嗎?然後,我會用

SELECT * FROM table WHERE v BETWEEN 1 AND 100 
+0

不,我們假設它們不是連續的。 – davidlee 2010-08-19 03:46:09

+0

@benmsia你的例子只是建議它們是連續的,在這種情況下,中間值比枚舉100個數快得多,因爲引擎只需執行一次範圍檢查而不是100次比較。 如果有差距,請參閱OMG Ponies的答案。 – Frank 2010-08-19 07:03:34

0

當我在學習數據庫我的導師告訴我,他們有效地歸結爲同樣的事情。

+0

從邏輯上說,是的,它們是等效的。但是優化器通常在IN和OR中更好地工作。 – 2010-08-18 21:08:14

+0

好點。我想我當時並沒有專門談論速度問題。 – 2010-08-18 21:14:37