Sidebar

Para tener un buen performance en stored procedures o sentencias sql hay que tener en cuenta entre otras cosas , los puntos enumerados a continuación:

1.- Tratar de evitar en lo posible el uso de sentencias llamadas non-sargable en los argumentos de 'where'. Por ejemplo "is nul", "or" , "<>" , "!=", "!>" , "NOT EXIST", "NOT IN", " NOT LIKE" y "LIKE %500" que aunque no siempre, a menudo impiden que el optimizador use un indice para ejecutar la búsqueda. En adición, las expresiones que incluyen funciones sobre una columna ó expresiones que tienen la misma columna en ambos lados del operador, son non-sargable.

2.- Si tienes un query que usa la sentencia 'NOT IN' , que ofrece un bajo desempeño debido ya que el optimizador tiene que realizar un nested table scan, es mejor utilizar alguna de las siguientes alternativas:

- EXISTS ó NOT EXISTS

- IN

- Realizar un LEFT OUTER JOIN y checar con una condición nula.

3.- Cuando hay opción de escoger entre la sentencia IN ó EXISTS, generalmente la segunda se ejecuta con mayor velocidad.

4.- Cuando uses LIKE en la sentencia where , trata de usar uno o más caracteres que antecedan el wildcard, por ejemplo LIKE 'ma%' , asi el optimizador tendra la habilidad de usar un índice para ejecutar el query, en cambio si el primer caracter es % el optimizador no podra tomar el indice y un table scan será ejecutado.

5.- Funciones y columnas separadas en la sentencia where, por ejemplo:

- Esta sentencia no tomará el indice:

select member_number, first_name, last_name

from members

where datediff(yy,dateofbirth,GETDATE()) >21

- Aqui aplicamos la recomendación y el índice será utilizado:

select member_number,first_name,last_name

from members

where dateofbirth < DATEADD(vv,-21,GETDATE())


Search

Tips BD