Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/04/2012, 09:32
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 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