SQL: optimización de la base de datos

Se necesita tiempo para convertirse en un experto en bases de datos o en un administrador de bases de datos experto. Todo esto viene con mucha experiencia en varios diseños de bases de datos y buenos entrenamientos.

Pero la siguiente lista puede ser útil para que los principiantes tengan un buen rendimiento en la base de datos:

  • Utilice el diseño de base de datos 3BNF explicado en este tutorial en el capítulo Conceptos de RDBMS.

  • Evite las conversiones de números a caracteres porque los números y los caracteres se comparan de manera diferente y conducen a una degradación del rendimiento.

  • Mientras usa la instrucción SELECT, solo obtenga la información necesaria y evite usar * en sus consultas SELECT porque cargaría el sistema innecesariamente.

  • Cree sus índices cuidadosamente en todas las tablas donde tiene operaciones de búsqueda frecuentes. Evite el índice en las tablas donde tiene menos número de operaciones de búsqueda y más número de operaciones de inserción y actualización.

  • Un análisis de tabla completa se produce cuando las columnas de la cláusula WHERE no tienen un índice asociado. Puede evitar un escaneo de tabla completa creando un índice en las columnas que se utilizan como condiciones en la cláusula WHERE de una declaración SQL.

  • Tenga mucho cuidado con los operadores de igualdad con números reales y valores de fecha / hora. Ambos pueden tener pequeñas diferencias que no son obvias a simple vista pero que hacen imposible una coincidencia exacta, evitando así que sus consultas devuelvan filas.

  • Utilice la combinación de patrones con prudencia. LIKE COL% es una condición WHERE válida, que reduce el conjunto devuelto a solo aquellos registros con datos que comienzan con la cadena COL. Sin embargo, COL% Y no reduce más el conjunto de resultados devueltos ya que% Y no se puede evaluar de forma eficaz. El esfuerzo para realizar la evaluación es demasiado grande para ser considerado. En este caso, se utiliza el COL%, pero el% Y se desecha. Por la misma razón, un comodín inicial% COL evita eficazmente que se utilice todo el filtro.

  • Ajuste sus consultas SQL examinando la estructura de las consultas (y subconsultas), la sintaxis SQL, para descubrir si ha diseñado sus tablas para admitir una manipulación rápida de datos y ha escrito la consulta de manera óptima, permitiendo que su DBMS manipule los datos de manera eficiente. .

  • Para consultas que se ejecutan de forma regular, intente utilizar procedimientos. Un procedimiento es un grupo potencialmente grande de sentencias SQL. El motor de la base de datos compila los procedimientos y luego los ejecuta. A diferencia de una instrucción SQL, el motor de la base de datos no necesita optimizar el procedimiento antes de ejecutarlo.

  • Evite utilizar el operador lógico OR en una consulta si es posible. O, inevitablemente, ralentiza casi cualquier consulta en una tabla de tamaño considerable.

  • Puede optimizar las cargas de datos masivos eliminando índices. Imagínese la tabla de historial con muchos miles de filas. También es probable que esa tabla de historial tenga uno o más índices. Cuando piensa en un índice, normalmente piensa en un acceso a la tabla más rápido, pero en el caso de cargas por lotes, puede beneficiarse eliminando los índices.

  • Al realizar transacciones por lotes, realice COMMIT después de la creación de un número considerable de registros en lugar de crearlos después de cada creación de registros.

  • Planifique desfragmentar la base de datos de forma regular, incluso si hacerlo significa desarrollar una rutina semanal.

Herramientas de afinación integradas

Oracle tiene muchas herramientas para administrar el rendimiento de las declaraciones SQL, pero dos de ellas son muy populares. Estas dos herramientas son:

  • Explain plan - la herramienta identifica la ruta de acceso que se tomará cuando se ejecute la instrucción SQL.

  • tkprof - mide el rendimiento por tiempo transcurrido durante cada fase del procesamiento de sentencias SQL.

Si simplemente desea medir el tiempo transcurrido de una consulta en Oracle, puede usar el comando SQL * Plus SET TIMING ON.

Consulte la documentación de su RDBMS para obtener más detalles sobre las herramientas mencionadas anteriormente y la desfragmentación de la base de datos.