Estimados amigos, el placer de saludarlos nuevamente...
Trabajando en tunning sobre unos scripts y encontrando una vez más un
pequeño pero perjudicial y repetido error, aprovecho para
compartirles como trato de hacer asiduamente la experiencia, con el
objetivo de mejorar la performance de nuestros códigos en general.
Ante todo supongo que todos estamos de acuerdo con el que el uso de funciones
en campos donde es muy importante el uso de un índice invalida totalmente la
utilización por parte del motor de base de datos del mismo.
Ejemplo:
Tenemos una tabla
“CONSUMO” de la cual tenemos que listar los campos “Id”
“FechaPresentacion” cuando la fecha sea mayor al '2020-05-20 23:59:59'
Si existe
un índice que cubra el campo “FechaPresentación” tendremos una excelente
performance a partir de la plena utilización del índice:
Habiendo repasado
lo perjudicial que son el uso de funciones en determinados campos, (sobre todo de filtro y ordenamiento, vayamos al uso de la función ISNULL
Es muy común
ver en queries el uso de esta función ante la necesidad de validar un campo
numérico que puede contener valores null
Ejemplo:
Dada la misma
tabla CONSUMO, debemos listar aquellos “id” cuyo consumo, (campo
“importe” de tipo Integer), es mayor a 5000 pesos. (hay
registros que pueden tener a la fecha importes con valor NULL)
Así es
común ver este tipo de queries:
El uso de la
función Isnull sobre el campo “Importe” inutiliza el índice sobre dicho campo…
Pero .. es
necesario el uso de la función Isnull para evitar errores de comparación de
campos numéricos con posibles valores nulos? Evitamos de ese modo un posible
error?
La respuesta es “no”.
Cualquier campo numérico null será tomado por el sql
server como “0” no siendo necesario utilizar la función Isnull y así inutilizar
el eventual índice dispuesto sobre dicho campo.
Utilizaremos
el idx y el resultado será el mismo.
Bueno gente me despido esperando que haya sido de utlilidad el tip.