替代的操作在MySQL

问题描述:

我看到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

如果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; 

为您的连接被删除,以便您不必在创建它下一次之前担心放弃它的临时表将消失。