Cursores de SQL Server y performance


Como ya todos sabemos el uso de esta técnica de programación tienen impactos negativos en la performance. Pero hay veces que no tenemos otra opción y si necesitamos usar algún que otro cursor Sad smile

En este post veremos como optimizar a los cursores ya que hay diferentes formas de definirlos y según como lo hagamos podemos tener distintos tiempos de respuesta.

Para nuestras pruebas usaremos la base de datos AdventurweWorks2012 en donde haremos distintos cursores probando los tiempos de respuesta, básicamente la diferencia entre ellos es el tipo de cursor pero no así la consulta o proceso que hagan internamente el cual siempre es el mismo.

Cursor Default:

La primer prueba es usar los cursores por defecto o sea sin indicarle ningún atributo.

Cursor Local:

La segunda prueba es definir al cursor como local y correr el mismo proceso

Cursor Local y estático:

Ahora haremos la prueba definiéndolo como local y a su vez estático

Cursor Local y FAST_FORWARD:

La siguiente prueba es configurarlo como Local y FAST_FORWARD (Rápido y solo hacia adelante)

Cursor Local , Static Read_Only y Forward_Only:

Nuestra ultima prueba es configurarlo con todas estas opciones.

 

Comparación de performance en tiempo:

Al correr todos los distintos procesos hemos tomado los tiempos donde arrojaron los siguientes resultados:

TEST TIEMPO (Seg)
CURSOR DEFAULT 22
LOCAL 20
LOCAL STATIC 5
LOCAL FAST_FORWARD 4
LOCAL STATIC READ_ONLY FORWARD_ONLY  4

image

Conclusiones:

Si bien el uso de los cursores es una técnica poco recomendada por performance, es bueno considerar si tenemos que usarlos cuales son las mejores opciones de configuración para poder obtener los mejores tiempos de respuesta dentro de un cursor. Como se puede observar en los test hay una diferencia significativa entre los Cursores Default o locales y el resto