MySQL, вложенные запросы и group_concat
Недавно, в ходе работы над одним веб-проектом заметил, что один SELECT запрос весьма долго выполняется. Начал разбираться. Там используется конструкция вида SELECT * FROM table1 WHERE foo='bar' AND id IN (SELECT id FROM table2 WHERE foo2='bar2'). Причем сам по вложенный запрос выполняется быстро. Если вместо вложенного запроса подставить список идентификаторов через запятую, то он также выполняется быстро.
Решение нашел следующее:
Сначала получаю список идентификаторов, для этого очень удобно пользоваться group_concat:
SELECT GROUP_CONCAT(id SEPARATOR ',') AS ids FROM table2 WHERE foo2='bar2'
А затем уже выполняю запрос SELECT * FROM table1 WHERE foo='bar' AND id IN (<ids>), где <ids> - результат первого запроса. Все работает быстро.
Разбираясь дальше, заметил, что это проявляется не всегда. Правда закономерности не отследил. Возможно это баг, исправленный в свежей версии MySQL.
Еще нет отзывов
Идет загрузка формы...