2013-05-15 89 views
1

我看到In operator alternative in mysql替代的操作在MySQL

,我差不多25,000 ids.I正在使用in操作上that.Then我得到Stackoverflow Exception。就是有在MySQL IN操作符任何其他選擇。

在此先感謝..

+0

你可以使用'exist' ..它比'In'快。存在將停止搜索時,它已經找到1匹配http://stackoverflow.com/questions/3999600/mysql-difference-between-in-and-exist – Meherzad

+0

你可以動態生成查詢,並用循環中的OR語句替換IN。但結果將是相同的(或更糟糕的)我猜...也許切片查詢幾個最小的查詢是選項(5查詢5000元素)? – Phantom

回答

3

如果ID是在另一個表:

SELECT * FROM table1 WHERE id IN (SELECT id FROM table2); 

那麼你可以使用代替連接:

SELECT table1.* FROM table1 INNER JOIN table2 ON table1.id = table2.id; 
1

你可以做到以下幾點:

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; 

爲您的連接被刪除,以便您不必在創建它下一次之前擔心放棄它的臨時表將消失。