Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Optimización subconsulta

Estas en el tema de Optimización subconsulta en el foro de Mysql en Foros del Web. Hola, tengo esta consulta. SELECT id FROM tabla1 t1 WHERE t1.id NOT IN (SELECT DISTINCT id FROM tabla2) AND t1.tipo=1 ORDER BY t1.id; Querria saber ...
  #1 (permalink)  
Antiguo 18/04/2012, 03:13
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 3 meses
Puntos: 0
Optimización subconsulta

Hola, tengo esta consulta.

SELECT id FROM tabla1 t1
WHERE t1.id NOT IN (SELECT DISTINCT id FROM tabla2) AND t1.tipo=1
ORDER BY t1.id;

Querria saber varias cosas:

a) La subconsulta cuantas veces se ejecuta 1, y luego se compara o una por cada registro de la t1?

b) Como podría optimizarla, ya que tengo varias consultas así y me van muy lentas, en el caso de que se ejecuta la subconsulta una vez por cada registro de t1, como se podría hacer para que se ejecute una?

Gracias.
  #2 (permalink)  
Antiguo 18/04/2012, 09:32
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Optimización subconsulta

Hola albert84:

las comparaciones IN y NOT IN son de las maneras más ineficientes que tienes para comparar registros, ya que se tiene que realizar una búsqueda exhaustiva por cada registro. Hay varias opciones que puedes implementar para evitar este tipo de consultas. Podrías comenzar reemplazando la sentencia IN-NOT IN por EXISTS-NOT EXISTS:

Código:
SELECT id FROM tabla1 t1
WHERE NOT EXISTS (
SELECT DISTINCT id FROM tabla2 t2 WHERE t2.id = t1.id) 
AND t1.tipo=1
ORDER BY t1.id;
Otra opción sería utilizar un LEFT JOIN, así:

Código:
SELECT id 
FROM tabla1 t1
LEFT JOIN tabla2 t2 ON t1.id = t2.id
WHERE 
t2.id IS NULL
AND t1.tipo=1
ORDER BY t1.id;
Está por demás decirte que debes tener un adecuado uso de índices para que tus consultas sean más rápidas. Revisa cada opción para ver cual de ellas resulta más óptima para lo que estás haciendo.

Saludos
Leo
  #3 (permalink)  
Antiguo 25/04/2012, 06:31
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Optimización subconsulta

Muchas gracias por contestar, no lo pude probar hasta ahora, con la left join ya había probado y el resultado empeora muchísimo.

En teoría estuve investigando y la subconsulta que puse es una subconsulta anidada y se ejecuta una vez... Pero viendo los resultados no creo que así sea.

Etiquetas: optimización, select, subconsulta, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:21.