Subconsulta muy lenta.
Publicado por Marcos Rodríguez (2 intervenciones) el 22/01/2004 01:07:18
Hola a todos,
Resulta que tengo una base de datos con cuatro tablas a las que llamaré T1, T2, T3 y TA. El caso es que cada una de estas tablas tiene un campo clave de tipo autonumérico, de manera que en las tablas T2 y T3 tengo un campo que coincide con el campo clave de la tabla T1, al que llamaré ID1. Además en las tablas T1, T2 y T3 tengo un campo que coincide con uno de los campos de la tabla TA, al que llamaré IDA.
Pues bien, estoy realizando una subconsulta del estilo siguiente:
SELECT ID1
FROM T1
WHERE ID1 NOT IN (SELECT ID1
FROM T1 INNER JOIN TA ON T1.IDA=TA.IDA);
El caso es que esta consulta la realiza perfectamente y con bastante velocidad, pero si realizo la misma consulta con la tabla T2, la velocidad es lentísima.
La única diferencia que veo es que ID1 es la clave de la tabla T1, pero en la tabla T2 el campo ID1 no es clave, aunque está indexado.
Podría alguien decirme por qué esta segunda consulta es tan lenta.
Muchas gracias de antemano,
Marcos.
Resulta que tengo una base de datos con cuatro tablas a las que llamaré T1, T2, T3 y TA. El caso es que cada una de estas tablas tiene un campo clave de tipo autonumérico, de manera que en las tablas T2 y T3 tengo un campo que coincide con el campo clave de la tabla T1, al que llamaré ID1. Además en las tablas T1, T2 y T3 tengo un campo que coincide con uno de los campos de la tabla TA, al que llamaré IDA.
Pues bien, estoy realizando una subconsulta del estilo siguiente:
SELECT ID1
FROM T1
WHERE ID1 NOT IN (SELECT ID1
FROM T1 INNER JOIN TA ON T1.IDA=TA.IDA);
El caso es que esta consulta la realiza perfectamente y con bastante velocidad, pero si realizo la misma consulta con la tabla T2, la velocidad es lentísima.
La única diferencia que veo es que ID1 es la clave de la tabla T1, pero en la tabla T2 el campo ID1 no es clave, aunque está indexado.
Podría alguien decirme por qué esta segunda consulta es tan lenta.
Muchas gracias de antemano,
Marcos.
Valora esta pregunta
0