Introducción a la optimización de Sql
- Las sentencias Sql se escriben para recuperar/obtener datos de la base de datos. Queremos que nuestra instrucción sql se ejecute rápidamente (ajuste de sql) y proporcione los resultados en segundos.
- Un sql con un diseño deficiente podría ralentizar toda la operación de la base de datos y detenerla por completo. Es mucho más difícil escribir SQL eficiente que escribir SQL funcionalmente correcto. El ajuste del rendimiento de SQL puede mejorar significativamente el estado y el rendimiento de un sistema.
- La clave para ajustar SQL es minimizar los datos a los que accede para proporcionar el resultado. Podemos minimizar los datos a los que accede para proporcionar el resultado a través de una ruta de búsqueda óptima.
Un ejemplo simple sería
select * from dept where emp=10
- Ahora esta consulta tendrá que buscar en todo el departamento de la tabla para encontrar los datos donde emp=10. Entonces tiene que acceder a la tabla completa
- Ahora, si creamos la columna index to emp, entonces solo puede acceder al índice y obtener el resultado. Así que aquí accede a menos datos
12 pasos para realizar el ajuste de Sql en Oracle
Aquí los consejos generales para ajustar el rendimiento de sql
(1) Primero, debe tener todas las herramientas necesarias para el ajuste de sql. Debe tener buena información sobre seguimiento, formateo del seguimiento, explicación del plan, lectura del plan de explicación en Oracle.
Buen conocimiento sobre los diversos métodos de unión disponibles en Oracle y cómo usarlos de manera eficiente
(2) Lea menos datos y sea eficiente en E/S.
Cuantos más datos lea para la instrucción sql, más latches necesitará adquirir y ralentizará el rendimiento. por lo que debe estar haciendo siempre menos lecturas lógicas Verifique la cantidad de filas en varias tablas involucradas y descubra el mejor método para crear la declaración sql
(2) Utilice buenos índices de Oracle
Los índices B-Tree y los índices de mapas de bits se pueden utilizar para aumentar el rendimiento de las consultas si los datos devueltos son inferiores al 10 %. Pero debemos tener cuidado al crear el índice, ya que también debe mantenerse para la operación de inserción, actualización y eliminación. Entonces, crear un índice crea una sobrecarga sobre muchas cosas. Así que debemos examinar cuidadosamente el efecto de crear el índice.
(3) Evite sql que deshabilite el uso de index
SQL que deshabilita índices
(a) Funciones ( to_char(), to_date(), etc. )
Corrección:mover la función al lado "constant/bind variable"
(b) Type Casting
En SQL
donde emp_no =10 (emp_no es un varchar2)
En PL/SQL
donde emp_no =v_emp_num (v_emp_num es un número)
Modificadores
e id + 0 =111
y date + 1 =sysdate (pruebe date =sysdate – 1)
Solución:cámbielo para evitarlo
(4) Utilice siempre la variable de vinculación en la aplicación. Si no usa la variable de vinculación en Oracle, el sql se analizará cada vez y afectará el rendimiento de la base de datos. Si contiene la variable de vinculación, el sql se almacenará en caché y la ejecución posterior no requerirá análisis y, por lo tanto, se mejorará el rendimiento general del sistema.
(5) UNIÓN vs OR. Use UNION para consultas con dos rutas de ejecución claras; cada uno devolviendo un número bastante pequeño de filas. No use la unión para consultas que probablemente devuelvan una gran cantidad de filas, ya que todas las filas deben ordenarse y la mayoría de ellas se descartarán. O tiende a deshabilitar el índice
(6) Use las estadísticas precisas del optimizador en la tabla para obtener el plan óptimo.
(7) Si está utilizando la función en la expresión de la condición, verifique si hay un índice basado en funciones en esa columna. Si no está presente, no se utilizará el índice
(8) Utilice las subconsultas correlacionadas
(9) Evite las malas prácticas de codificación
Algunos consejos
(a) Evite la unión cartesiana. Asegúrese de que todas las tablas requeridas en las consultas sean necesarias y estén vinculadas entre sí
(b) Use Decode para evitar múltiples viajes a la base de datos
(c) Intente evitar la unión externa
(d ) A veces, descomponer la lógica en partes pequeñas hace que el trabajo sea más rápido
(10) Si intenta usar la vista compleja, verifique si las tablas base se pueden usar en su lugar, ya que la vista tiende a empeorar el rendimiento
(11) Use UNION ALL Vs UNION si sabe que los datos recuperados no tendrán filas duplicadas
(12) Utilice sugerencias para optimizar el plan de ejecución. A veces, la sugerencia se puede usar para cambiar el plan de ejecución de la consulta a fin de tomar la ruta más óptima.
Algunas veces, la observación vinculante crea un mal plan, por lo que, en ese caso, poner la sugerencia necesaria para arreglar el plan ayuda a obtener la buen rendimiento siempre
Las sugerencias más comunes son
/*+ LEADING (alias de tabla) */ especifica la tabla por la cual comenzar a unirse
/*+ FIRST_ROWS */ muy bueno para en línea pantallas:favorece los BUCLES NESTED
/*+ ÍNDICE (nombre de alias.índice de tabla) */ especifica el índice que desea usar. Nota:si el índice se descarta y se vuelve a crear y el nombre cambia, la sugerencia ya no es válida.
/*+ USE_NL (table alias1 table alias 2)*/ pide al optimizador que use Nested Loop Join para las dos tablas especificadas
Evite las sugerencias innecesarias del optimizador y utilícelas con cuidado
Estos son algunos de los consejos para evitar problemas y hacer el ajuste de sql. La afinación de Sql es un gran océano y puedes aprender cosas solo practicando. ¡¡La mejor de las suertes!!
También lee
https://docs.oracle.com/cd/B19306_01/server.102/b14211/sql_1016.htm