As consultas "IN" do MySQL são terrivelmente lentas com subconsulta, mas rápidas com valores explícitos

Eu tenho uma consulta MySQL (Ubu 10.04, Innodb, Core i7, 16Gb RAM, unidades SSD, parâmetros MySQL otimizados):

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')

A tabela em_link_data possui cerca de 7 milhões de linhas, em_link possui alguns milhares. Esta consulta levará cerca de18 segundos completar. No entanto, se eu substituir os resultados da subconsulta e fazer o seguinte:

SELECT
COUNT(DISTINCT subscriberid)
FROM
em_link_data
WHERE
linkid in (24899,24900,24901,24902);

a consulta será executada em menos de 1 milissegundo. Somente a subconsulta é executada em menos de 1 ms, a coluna linkid é indexada.

Se eu reescrever a consulta como uma associação, também será menor que 1ms. Por que uma consulta "IN" é tão lenta com uma subconsulta e por que tão rápida com os valores nela? Não consigo reescrever a consulta (software comprado), então esperava que houvesse algum ajuste ou dica para acelerar essa consulta! Qualquer ajuda é apreciada.

questionAnswers(4)

yourAnswerToTheQuestion