MySQL - PROBLEMAS INDICES SUBQUERY

 
Vista:

PROBLEMAS INDICES SUBQUERY

Publicado por Fernando (1 intervención) el 11/04/2012 13:29:39
Buenos días a tod@s,
tengo un problema con una consulta y me gustaría que me ayudarais.

Os pongo en antecedentes, utilizo MYSQL y un CRM llamado SUGAR que genera automáticamente las consultas sql, por lo que es dificil modificarlas. Pues bien tengo la siguiente consulta:

SELECT *
FROM ACCOUNTS
WHERE ID IN (
SELECT eabr.bean_id
FROM email_addr_bean_rel eabr
JOIN email_addresses ea ON ea.id = eabr.email_address_id
WHERE eabr.deleted = 0
AND ea.email_address LIKE '[email protected]%'
)

Donde la columna ID de la tabla ACCOUNTS es la PRIMARY KEY, Al obtener el plan de ejecución de la consulta mediante el explain tenemos:

1 PRIMARY ACCOUNTS ALL 286630 Using where
2 DEPENDENT SUBQUERY eabr ref idx_email_address_id,idx_bean_id idx_bean_id 108 func 1 Using where
2 DEPENDENT SUBQUERY ea eq_ref PRIMARY,idx_ea_email PRIMARY 108 sugar6integracion.eabr.email_address_id 1 Using where

SI embargo si sustituyo los valores que devuelve la subconsulta en el IN, de la siguiente forma:

SELECT *
FROM ACCOUNTS
WHERE ID IN (
'3600475b-98d7-6ffa-490a-4f83031fb55d', '7a7d2aa8-dcf0-c929-8f5d-4f856259bc01', '2f77757f-8e69-0ffe-7d02-4f83031cddca'
)

De esta forma si me coge la PRIMARY KEY.

Mi duda es la siguiente, se supone que el optimizador primero ejecuta la subconsulta y a partir de los valores que retorna ejecuta la consulta primcipal ¿no?.

Alguien me podría decir si es así y como podría conseguir que la consulta coja la primary key. Recordad que no puedo modificar la consulta, todo debe ser a base de crear indices (he probado a forzar el indice y ni por esas)

Muchas gracias a tod@s.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder