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.
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


0