Optimización de consultas sql

Necesito ayuda para optimizar algunas consultas, no se si me podrían ayudar, espero y si... Aquí les dejo una de las consultas a optimizar para que comentarios me pueden hacer:
SELECT eqp_cve_equipo, eqp_rpe_coordinador, emp_nombre,
emp_apellido_paterno, emp_apellido_materno, eqp_cve_area,
aar_descripcion
FROM equipos_procesos, empleados, areas_agencias
WHERE eqp_cve_area IN (SELECT aar_cve_area
                                    FROM areas_agencias
                                    WHERE aar_equivalencia LIKE cve_divzona)
AND eqp_cve_proceso LIKE procesocve_tot
AND emp_rpe = eqp_rpe_coordinador
AND eqp_cve_area = aar_cve_area
ORDER BY eqp_cve_equipo;
Espero y me puedan ayudar o darme una recomendación acerca de la optimización de esta consulta...

1 Respuesta

Respuesta
1
Es difícil optimizar una consulta solo presentando la consulta, hay que tener en cuenta las claves foráneas y primarias de cada tabla y que indices se han creado sobre ellas. Por recomendación todas las claves foráneas (restricciones de integridad entre tablas) deberían tener índices, al igual que las claves primarias de cada tabla.
Al ver la consulta y nada más el tema de optimización tendría que estudiarse por la subconsulta, los like y el order by.
1) El IN sobre la subconsulta debería ser sustituido por el EXISTS, osea, en lugar de:
eqp_cve_area IN (SELECT aar_cve_area
FROM areas_agencias
WHERE aar_equivalencia LIKE cve_divzona)
Quedaría:
Exists (SELECT 1
FROM areas_agencias
WHERE  aar_cve_area = eqp_cve_area AND aar_equivalencia LIKE cve_divzona)
2) Usar el LIKE solo si es estrictamente necesario, o sea para buscar patrones como %ALGO%, si cve_divzona y procesocve_tot son valor utilizar = y no LIKE
3) ORDER by eqp_cve_equipo, ayudaría tener un índice por esa columna en la tabla correspondiente.
Ok muchas gracias por tu respuesta, pero si utilizo un exists no me respetaría lo que tengo adentro de la subconsulta en caso de que resultara verdadero el exists, me refiero a que con el solo hecho de que aparezca una fila como resultado la subconsulta que esta adentro ya no tendrá ningún valor y solamente ejecutaría la consulta externa.
No se si me explique bien pero el hecho es que el exists no me arrojaría los resultados que quiero...
No se que opines acerca de esto... espero tu respuesta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas