jueves, 24 de mayo de 2012

Optimización de consultas SQL

Uno de los temas más importantes en el desarrollo y mantenimiento de Bases de datos en cuanto al tiempo de procesamiento y ejecución de las consultas SQL, es el afinamiento u optimización. Cada día se necesita procesar mayor cantidad de datos y obtener de manera más rápida y precisa la información. Muchos de los problemas de rendimiento se deben entre otras cosas al hardware, al software, al motor de base de datos y por sobre todo al diseño, índices y mala formulación de consultas SQL. A continuación se dan algunas recomendaciones que nos pueden servir al momento de optimizar nuestras consultas.




A la hora de diseñar la base de datos, las tablas normalizadas permiten reducir al mínimo el espacio ocupado por nuestra base y permiten asegurar la consistencia de la información al mismo tiempo que son muy rápidas para la realización de transacciones, pero generan un mayor tiempo de demora a la hora de consultarlas ya que se deben realizar generalmente la unión de varias tablas, por lo que en caso de necesidad de altas velocidades de respuesta con grandes volúmenes de datos un modelo desnormalizado es más que conveniente teniendo en cuenta todas las implicaciones del caso. Ajustar al máximo el tamaño de los campos ayuda a no desperdiciar espacio.



Los índices son campos que permiten la búsqueda en una tabla a una velocidad notablemente superior. Sin embargo, cuentan con la desventaja que hace más lenta la actualización, carga y eliminación de los registros, ya que por cada modificación en la tabla se deberá modificar también el índice, además se debe tener en cuenta el hecho de que los índices también ocupan espacio en disco. Es por esto que no es factible indexar todos los campos de la base y se hace necesario seleccionarlos cuidadosamente. Cabe destacar que por defecto las tablas no contienen índices por lo que la introducción de estos puede llegar a producir mejoras de más del 100% en algunos casos. Los campos que se recomiendan indexar son: Claves Primarias, Claves Foráneas o simplemente campos por los cuales se realizaran búsquedas. Siempre conviene indexar tablas con gran cantidad de registros y que van a ser consultadas intensamente. 


Hacer un uso inadecuado de Vistas puede desmejorar el rendimiento, en lugar de utilizar Vistas que incluyen consultas complejas con alto grado de procesamiento, se recomienda usar una tabla temporal.


 Principales recomendaciones:

  •  No utilizar SELECT * por que el motor debe leer primero la estructura de la tabla antes de ejecutar la sentencia. Seleccionar solo aquellos campos que se necesiten, cada campo extra genera tiempo extra. 
  •  Utilizar Inner Join , left join , right join, para unir las tablas en lugar del where, esto permite que a medida que se declaran las tablas se vallan uniendo, mientras que si utilizamos el where el motor genera primero el producto cartesiano de todos los registros de las tablas para luego filtrar las correctas, un trabajo definitivamente lento. 
  • Especificar el alias de la tabla delante de cada campo definido en el select, esto le ahorra tiempo al motor de tener que buscar a que tabla pertenece el campo especificado.
  • El orden de ubicación las tablas en el from deberían ir en lo preferible de menor a mayor según el número de registros , de esta manera reducimos la cantidad de revisiones de registros que realiza el motor al unir las tablas a medida que se agregan.


Herramientas Tuning:

Existen en el mercado herramientas que administran, optimizan y afinan bases de datos. La aplicación SQL Optimizer es un módulo del software TOAD creado por la empresa QUEST, este módulo tiene la capacidad de analizar la consulta que le proporcionamos y mostrar las alternativas que arrojan un menor coste y mas rapidez en los resultados. Adicional muestra la deficiencia de la consulta original. Otra herramienta es el software DB PowerStudio, herramienta para optimización, tuning y analices de sentencias SQL. Tanto el SQL Optimizer como el DB Power Studio son licenciados.


DB PowerStudio




No hay comentarios:

Publicar un comentario