miércoles, 23 de mayo de 2018

Las claves de SQL que pueden mejorar tus consultas

Cuando uno piensa en consultas en SQL surgen ciertas incertidumbres ¿Traerá los datos que quiero? ¿La consulta será performante? A medida que uno se inmerge en el mundo SQL va descubriendo pequeños tips o reglas que le pueden salvar la vida o por lo menos tiempo de trabajo.

Al comenzar a realizar consultas reiterativas aprendimos que una de las mejores opciones que uno puede aplicar a esto es generar Stored Procedures (SP). Estas son consultas ejecutables, las cuales, a través de una invocación se puede iniciar una consulta pre diseñada. Esto ahorra horas de generar código, si es que siempre se requiere la misma query. 

Cuando comenzamos a diseñar SP vemos las ventajas del uso de variables. Pero cuidado, estas pueden ser un arma de doble filo y por eso hay que tratar de usar la mínima e indispensable cantidad. Esta recomendación aplica también a las tablas temporales, ya que su uso excesivo puede generar problemas en la performance.

Una muy buena práctica dentro de los SP es inicializar todas las variables que vayamos a utilizar, es decir, definir bien su tipo de dato y tamaño. Esto permite evitar que luego surjan problemas por el tamaño de dato que acepte una columna y se generen errores al momento de ejecutar la consulta.

Por otro lado, al momento de realizar joins en los SP entre columnas de tablas diferentes, es útil que los campos por los cuales joineeamos contengan índices, ya que éstos mejoran la performance del SP. Los índices permiten optimizar el acceso a datos, ya que a medida que las tablas se van extendiendo estos se vuelven altamente necesarios para mantener buenos niveles de performance. Pero a la hora de utilizarlos hay que tener en cuenta que sean los correctos, debido a que no es una buena práctica crear índices sobre todas las columnas ya que, como consecuencia, esto impactaría en la búsqueda que realiza el motor de base de datos, y afectaría negativamente su rendimiento.

Otra situación que afecta directamente a los tiempos de consulta es el uso de los favoritos ORDER BY y SELECT DISTINCT. Estos polémicos personajes generan ventajas y desventajas al utilizarlos. Al decidir cuál utilizar hay que prestarle atención a la funcionalidad del SP. Siendo el SELECT DISTINCT un gran actor al traer datos diferentes, este está enfocado a optimizar el uso de memoria. Mientras que el ORDER BY está centrado en la velocidad de ejecución, y en el uso de memoria suele ser deplorable…

De las grandes ventajas que nos ofrecen los Procedures, la más importante es el hecho que puedan interpretar parámetros y devolver otros, y eso los hace excesivamente útiles. Otra de las ventajas de usar SP es la rapidez que se obtiene al procesar datos en el servidor. Una de las razones por la que sucede esto, se debe a que los datos se procesan en memoria, en el mismo servidor de la base de datos; y sólo se retornan los datos realmente necesarios. Por el otro lado, si esto se tuviera que hacer en el Web Server, o App Server, tendríamos que traernos todos los datos por red, para luego terminar filtrando solo unos pocos.

Concluyendo la nota, nuestra intención no es imponer el uso de los Stored Procedures, ya que todo lo que podés realizar dentro de ellos, también lo podés hacer utilizando querys. Igualmente los recomendamos, solamente mencionamos algunas de sus ventajas, pero vastas en cantidad. Por ejemplo, la seguridad que ellos nos brindan pudiendo encontrar errores en tiempo de compilación y no en tiempo de ejecución.  

Otro dato importante para tener en cuenta es que su uso va a depender de la funcionalidad que se le dé, para consultas gigantescas y que utilizan varias tablas son muy útiles, la query va a ser mucho más rápida en comparación con consultas que se realizan desde NHibernate.  En cambio, si tu objetivo va a ser realizar consultas simples, otros métodos van a ser más eficaces.

Autores:
Mara Guerrera - Tomas Borodowski 
Desarrolladores .Net en Baufest