Если ваш подзапрос быстрый, значит, кампания и ссылка абсолютно проиндексированы.l.id - это PK, и поэтому кластеризация происходит быстро.Но, насколько я помню (с тех пор, как я проверял эту тему в прошлый раз), mysql описывает внутреннюю оптимизацию для подзапросов «in», чтобы использовать результат индексации подзапроса для повышения производительности, а также использует кэш для левой части «IN».чтобы перетащить его внутрь подзапроса быстрее, и если индексы установлены в истинное значение, у него не должно быть такой разницы, чтобы использовать внутреннее соединение или «IN», а не кеширование, и это может быть связано с проблемой кеширования и большим объемом данных.http://dev.mysql.com/doc/internals/en/transformation-scalar-in.html
Я не знаю ситуацию с программным обеспечением, но если вы можете использовать INNER JOIN и у вас есть (возможно) некоторые дополнительные определения перед предложением IN в предложении WHERE вашего внешнего запроса, убедитесь, чтопереместить эти пункты в before вашего основного INNER JOIN через временное INNER JOIN ведет себя подобно промежуточному предложению «where» последовательно и уменьшает количество перекрестных сравнений в JOIN, например:
SELECT ... FROM t
INNER JOIN (SELECT 1) AS tmp ON t.asd=23
INNER JOIN t2 ON ...
Примеры сравненийпоиск по обычному и временному соединению: 1000 * 1000> 1000 + (100 * 1000)
Также кажется, что подзапрос фильтруется постоянными значениями, поэтому если бы это был я, я бы помещал предложения в подзапрос, генерируянабор результатов и уменьшить количество сравнений в JOIN, например:
SELECT ... FROM t
INNER JOIN (SELECT ... FROM t2 WHERE constant clauses) AS tbl2 ON ...
В любом случае, в запросе IN, для сравнения любого столбца таблицы в подзапросе с любым столбцом таблицы во внешнем запросе требуетсястолбцы обеих сторон должны быть точно проиндексированы (относительно составных индексов), но все же это может быть кешпроблема.
РЕДАКТИРОВАНИЕ: Также мне было любопытно спросить: может ли иметь смысл создание составного индекса для l.campaignid, l.link и l.id?