MySQL "IN" consulta terriblemente lento con subconsulta pero rápido con valores explícitos

Tengo una consulta MySQL (Ubu 10.04, Innodb, Core i7, 16Gb RAM, unidades SSD, parámetros MySQL optimizados):

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

La tabla em_link_data tiene aproximadamente 7 millones de filas, em_link tiene unos pocos miles. Esta consulta tomará sobre 18 segundos completar. Sin embargo, si sustituyo los resultados de la subconsulta y hago esto:

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

then la consulta se ejecutará en menos de 1 milisegundo. La subconsulta solo se ejecuta en menos de 1 ms, la columna linkid está indexada.

Si reescribo la consulta como una combinación, también menos de 1 ms. ¿Por qué una consulta "IN" es tan lenta con una subconsulta y por qué es tan rápida con valores? No puedo volver a escribir la consulta (software comprado), ¡así que esperaba que hubiera algún ajuste o pista para acelerar esta consulta! Cualquier ayuda es apreciada.

Respuestas a la pregunta(4)

Su respuesta a la pregunta