2013-05-15 1 views
1

Я вижу In operator alternative in mysqlАльтернатива в оператора в MySQL

Я почти 25,000 ids.I я использую in оператора на that.Then я получаю Stackoverflow Exception .а там любая другая альтернатива для оператора IN в MySQL.

Заранее спасибо ..

+0

Вы можете использовать 'exist' .. Это быстрее, чем' In'. Exist остановит поиск, когда он найдет 1 совпадение. Http://stackoverflow.com/questions/3999600/mysql-difference-between-in-and-exist – Meherzad

+0

вы можете динамически генерировать запрос и заменять IN операторами OR в цикле. но результат будет таким же (или хуже), я думаю ... возможно, нарезка запроса на несколько маленьких запросов - это вариант (5 запросов с 5000 элементами)? – Phantom

ответ

3

Если идентификаторы находятся в другой таблице:

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 - Вставьте все ваши идентификаторы во временную таблицу

Для каждого идентификатора в списке:

insert ignore into myId (id) values (anId); 

(это будет иметь дополнительный бонус де-множительной ваш список идентификаторов, готовых к заключительному этапу)

3 - Присоединиться к временному столу

SELECT t1.* FROM myTable1 t1 INNER JOIN tempIdTable tt ON t1.id = tt.id; 

Временная таблица исчезнет, ​​как только ваше соединение обрывается так ваш не придется беспокоиться об удалении его, прежде чем создать его в следующий раз.