我看到In operator alternative in mysql替代的操作在MySQL
,我差不多25,000
ids.I正在使用in
操作上that.Then我得到Stackoverflow Exception
。就是有在MySQL IN操作符任何其他選擇。
在此先感謝..
我看到In operator alternative in mysql替代的操作在MySQL
,我差不多25,000
ids.I正在使用in
操作上that.Then我得到Stackoverflow Exception
。就是有在MySQL IN操作符任何其他選擇。
在此先感謝..
如果ID是在另一個表:
SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
那麼你可以使用代替連接:
SELECT table1.* FROM table1 INNER JOIN table2 ON table1.id = table2.id;
你可以做到以下幾點:
1 - 創建一個MySQL Temporary Table
CREATE TEMPORARY TABLE tempIdTable (id int unsigned not null primary key);
2 - 將你所有的IDS到臨時表
對於每一個ID在你的名單:
insert ignore into myId (id) values (anId);
(這將有額外的獎勵去複製您已準備好進行最後一步的ID列表)
3 - 加入臨時表
SELECT t1.* FROM myTable1 t1 INNER JOIN tempIdTable tt ON t1.id = tt.id;
爲您的連接被刪除,以便您不必在創建它下一次之前擔心放棄它的臨時表將消失。
你可以使用'exist' ..它比'In'快。存在將停止搜索時,它已經找到1匹配http://stackoverflow.com/questions/3999600/mysql-difference-between-in-and-exist – Meherzad
你可以動態生成查詢,並用循環中的OR語句替換IN。但結果將是相同的(或更糟糕的)我猜...也許切片查詢幾個最小的查詢是選項(5查詢5000元素)? – Phantom