Tema: query lenta
Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/05/2013, 05:32
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: query lenta

Cita:
Algunas de esas columnas tienen sus indices asignados
Primer consejo: Si usas un campo en el WHERE, asegurate que tenga un índice que sirva.
Hay dos cosas que seguro no debes hacer en campos indexados:
1) No generes un índice sobre un campo que tenga dos valores posibles (0/1, por ejemplo). Un campo de ese tipo en el mejor de los casos repartirá el 50% de los registros en cada entrada, por lo que el analizador de consultas de Oracle simplemente lo descartará y leerá la tabla.
2) Si tienes un campo DATE indexado, y los datos son de tipo Fecha y Hora (dd/mm/aaaa HH:mm:ss), no lo trunques si lo usas como parámetro del WHERE. Cuando lo haces, como el tipo comparado (fecha corta) es diferente al tipo declarado de la clave del indice (fecha larga), Oracle descarta el índice, y lee la tabla.

En esencia tu problema de lentitud parece ser causado porque al no haber parametrizaciones útiles, o relaciones que usen los índices, realiza un full table scan, que es la peor forma de consulta que exista, después del producto cartesiano.

Por cierto, en tu primera consulta, si el campo status es un flag de dos estados posibles, entonces no tiene ningún sentido hacer un UNION, porque generaría el mismo resultado que una consulta común, con el agregado de un ORDER BY sobre ese campo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)