SELECT value FROM table WHERE id IN ("1","2","3", ... "500000")
有一個類似上面的查詢,括號中的值約爲500,000。MySQL Query「IN」500,000條記錄
有沒有更好的方法來執行搜索?這種方法非常麻煩/緩慢。
SELECT value FROM table WHERE id IN ("1","2","3", ... "500000")
有一個類似上面的查詢,括號中的值約爲500,000。MySQL Query「IN」500,000條記錄
有沒有更好的方法來執行搜索?這種方法非常麻煩/緩慢。
將500,000個值放入另一個表中並加入它。
SELECT t.value
FROM table t
INNER JOIN NewTempTable n
ON t.id = n.id
你已經接近mysql數據包大小限制(它是16MB),所以這肯定是個壞主意。
從哪個來源獲得這些50萬個ID?你不能將它們存儲在數據庫中並執行連接嗎?
你可以做到以下幾點:
步驟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的加載
你是怎麼500K的IDS ?從另一個查詢?或者他們在應用程序代碼中的某個列表中? – 2012-01-03 22:49:45
這些500,000項目來自哪裏?如果它們源自數據庫,則可以「加入」。很難想象用戶輸入了500,000個值:-) – drdwilcox 2012-01-03 22:50:33
來自不在MySQL中的數據列表。我想我可以添加這些數據並加入JOIN。這會更快嗎? – reefine 2012-01-03 22:51:02