2011-10-24 13 views
5

Tenemos una tabla que tiene valores NULL o "Aceptado". Mi consulta arroja unas 250 filas.ISNULL ralentiza la consulta

Si añado una condición WHERE de -

AND Description = 'Accepted' 

mis 250 filas de retorno en 2 segundos.

Sin embargo, si añado una condición WHERE de -

ISNULL(Description, '') = 'Accepted' 

mis 250 filas vuelven en 47 segundos.

¿Alguien ha tenido problemas de rendimiento con el uso de la función ISNULL? Lamentablemente, estoy limitado por el programa a tener que usar ISNULL en este momento.

+1

Fuera de interés, ¿cómo estás "programáticamente limitado"? –

Respuesta

12

Cuando incluye un campo dentro de una función, cambia la forma en que se debe ejecutar el optimizador y lo obliga a ignorar los índices.

ver aquí: What makes a SQL statement sargable?

+0

Impresionante. ¡Gracias! – duckmike

+0

+1 al único comentarista que realmente leyó la publicación completa. –

7

También pueden pasar por alto las funciones del todo mediante el uso de:

WHERE (Description = 'Accepted' OR Description IS NULL)

2

Si usted está tratando de utilizar esto en la condición WHERE, su uso es nulo, no isnull

SELECCIONAR el campo DE la tabla DONDE la descripción es nula

o lo contrario

campo SELECT FROM tabla WHERE NO descripción es nula

3

Usando

ISNULL(Description, '') = 'Accepted' 

en su condición donde doesnt tiene ningún sentido en este caso. Si la descripción es nula, la cláusula where original de

AND Description = 'Accepted' 

seguirá siendo suficiente. Básicamente está comparando '' con 'Aceptado' en cada fila donde la descripción es nula.

Por favor, amplíe lo que está tratando de lograr con la consulta, creo que podría estar yendo en la dirección incorrecta.

+0

+1 señalando el sangrado obvio: ambos evalúan como falso/desconocido cuando NULL, que es efectivamente el mismo. Probablemente también lo hubiera pasado por alto. – gbn

Cuestiones relacionadas