我們有ID的列表,例如:MySQL查詢,選擇的結果有一定的陣列
11, 22, 55, 99, 187
我們有一個字段「ID」的表。
我們基本上要選擇所有結果,其中id
等於11, 22, 55, 99, 187
什麼是做一個MySQL查詢像這樣的最佳方式?
相反= '11' OR '22'.....
我們使用這些用PHP,因爲我們有ID的列表,並希望選擇使用這些ID與一個MySQL查詢的結果做WHERE
ID的。
我們有ID的列表,例如:MySQL查詢,選擇的結果有一定的陣列
11, 22, 55, 99, 187
我們有一個字段「ID」的表。
我們基本上要選擇所有結果,其中id
等於11, 22, 55, 99, 187
什麼是做一個MySQL查詢像這樣的最佳方式?
相反= '11' OR '22'.....
我們使用這些用PHP,因爲我們有ID的列表,並希望選擇使用這些ID與一個MySQL查詢的結果做WHERE
ID的。
使用此
Where id IN (11,22,55,99,187)
嘗試在第
至於其他的答案,你可以使用IN (...)
條款提及。但如果你有ID值的一個長長的清單,並希望獲得最佳的性能,那麼我會建議使用臨時表來存儲值,然後在臨時表上使用INNER JOIN
:
/* Create the temporary table */
CREATE TEMPORARY TABLE temp_lookup (id INT NOT NULL);
/* Insert values in temp table */
INSERT INTO temp_lookup (id) VALUES (11), (22), (55), (99), (187), ...;
/* Select using INNER JOIN */
SELECT mt.field_list
FROM main_table AS mt INNER JOIN temp_lookup AS tt ON mt.id = tt.id
你真的測試這個或者你有一些參考?收益是多少?我運行了一個非常有限的測試(4個查找值/ 160k記錄)並沒有看到增益,實際上看到的性能更差 - 0.12s vs 0.20s。在此之後,我用temp_lookup中的33個不同的值做了另一個測試 - 加入/溫度爲0.62與IN爲0.12的差異。我看不到任何證據(也不是邏輯)臨時表會更快。 (這兩個測試在ID上都沒有索引運行,兩個方法的索引都運行在0.0s;除了臨時表1需要0.03s來創建臨時表) – Unreason 2011-03-14 12:59:29