У меня есть запрос MySQL (Ubu 10.04, Innodb, Core i7, 16Gb RAM, SSD-диски, оптимизированные параметры MySQL):
SELECT
COUNT(DISTINCT subscriberid)
FROM
em_link_data
WHERE
linkid in (SELECT l.id FROM em_link l WHERE l.campaignid = '2900' AND l.link != 'open')
В таблице em_link_data имеется около 7 миллионов строк, у em_link - несколько тысяч. Этот запрос займет около 18 секунд. Однако, если подставить результаты подзапроса и выполните следующее:
SELECT
COUNT(DISTINCT subscriberid)
FROM
em_link_data
WHERE
linkid in (24899,24900,24901,24902);
тогда запрос будет выполняться менее чем за 1 миллисекунду. Только в подзапросе работает менее 1 мс, индексируется индекс linkid.
Если я переписал запрос как соединение, то и меньше 1 мс. Почему запрос "IN" настолько медленный с подзапросом в нем и почему так быстро со значениями в нем? Я не могу переписать запрос (купленное программное обеспечение), поэтому я надеялся, что есть некоторые подсказки или подсказки, чтобы ускорить этот запрос! Любая помощь приветствуется.