2012-01-03 99 views
2
SELECT value FROM table WHERE id IN ("1","2","3", ... "500000") 

有一個類似上面的查詢,括號中的值約爲500,000。MySQL Query「IN」500,000條記錄

有沒有更好的方法來執行搜索?這種方法非常麻煩/緩慢。

+0

你是怎麼500K的IDS ?從另一個查詢?或者他們在應用程序代碼中的某個列表中? – 2012-01-03 22:49:45

+1

這些500,000項目來自哪裏?如果它們源自數據庫,則可以「加入」。很難想象用戶輸入了500,000個值:-) – drdwilcox 2012-01-03 22:50:33

+0

來自不在MySQL中的數據列表。我想我可以添加這些數據並加入JOIN。這會更快嗎? – reefine 2012-01-03 22:51:02

回答

9

將500,000個值放入另一個表中並加入它。

SELECT t.value 
    FROM table t 
     INNER JOIN NewTempTable n 
      ON t.id = n.id 
2

你已經接近mysql數據包大小限制(它是16MB),所以這肯定是個壞主意。

從哪個來源獲得這些50萬個ID?你不能將它們存儲在數據庫中並執行連接嗎?

2

你可以做到以下幾點:

步驟01:製作標識的表

DROP TABLE IF EXISTS lookup_ids; 
CREATE TABLE lookup_ids SELECT id FROM `table` WHERE 1=2; 
ALTER TABLE lookup_ids ADD PRIMARY KEY (id); 

步驟02:插入所有500000個值到lookup_ids

步驟03:製作一個體面覆蓋上table

ALTER TABLE `table` ADD UNIQUE INDEX id_value_ndx (id,value); 

步驟04指數:執行第ËJOIN

SELECT t.value FROM `table` t INNER JOIN lookup_ids i USING (id); 

SELECT t.value FROM `table` t NATURAL JOIN lookup_ids i; 

警告:步驟1-3,不需要重複,除非你有一組不同的查找ID的加載