sql >> Base de Datos >  >> RDS >> Oracle

Cuándo usar sugerencias en la consulta de Oracle

La mayoría de las sugerencias son una forma de comunicar nuestra intención al optimizador. Por ejemplo, el leading la sugerencia que mencionas significa unir mesas en este orden . ¿Por qué es esto necesario? A menudo se debe a que el orden de combinación óptimo no es obvio, porque la consulta está mal escrita o las estadísticas de la base de datos no son precisas.

Entonces, un uso de sugerencias como leading es averiguar la mejor ruta de ejecución y luego averiguar por qué la base de datos no elige ese plan sin la pista. ¿Recopilar nuevas estadísticas resuelve el problema? ¿Reescribir la cláusula FROM resuelve el problema? Si es así, podemos eliminar las sugerencias e implementar el SQL desnudo.

Algunas veces hay momentos en los que no podemos resolver este enigma y tenemos que mantener las pistas en producción. Sin embargo, esto debería ser una rara excepción. Oracle ha tenido mucha gente muy inteligente trabajando en el Optimizador basado en costos durante muchos años, por lo que sus decisiones suelen ser mejores que las nuestras.

Pero hay otras pistas que no parpadearíamos para ver en Producción. append suele ser crucial para afinar insertos masivos. driving_site puede ser vital para ajustar las consultas distribuidas.

Por el contrario, casi siempre se abusa de otras pistas. Sí parallel , Estoy hablando acerca de ti. Poniendo a ciegas /*+ parallel (t23, 16) */ probablemente no hará que su consulta se ejecute dieciséis veces más rápido, y no pocas veces resultará en más lento recuperación que una ejecución de un solo subproceso.

Entonces, en resumen, no hay un consejo aplicable universalmente sobre cuándo debemos usar sugerencias. Las cosas clave son:

  1. comprender cómo funciona la base de datos, y especialmente cómo funciona el optimizador basado en costos;
  2. entender lo que hace cada sugerencia;
  3. probar consultas sugeridas en un entorno de ajuste adecuado con datos equivalentes a producción.

Obviamente, el mejor lugar para comenzar es la documentación de Oracle . Sin embargo, si tiene ganas de gastar algo de dinero, el libro de Jonathan Lewis sobre the Cost-Based Optimizer es la mejor inversión que podrías hacer.