6
votes

Isnull ralentit la requête

Nous avons une table qui a nul ou "acceptée" comme des valeurs. Ma requête revient environ 250 lignes.

Si j'ajoute un état de l'état de - xxx

My 250 lignes retour dans 2 secondes.

Cependant, Si j'ajoute un état de condition de - xxx

My 250 rangées retourner en 47 secondes.

Quelqu'un a-t-il rencontré des problèmes de performance avec l'utilisation de la fonction ISnull? Malheureusement, je suis limité de manière programmative à avoir à utiliser Isnull à ce stade.


1 commentaires

Par intérêt, comment allez-vous "de manière programmative"?


4 Réponses :


12
votes

Lorsque vous incluez un champ à l'intérieur d'une fonction, il modifie la manière dont l'optimiseur doit fonctionner et la force à ignorer les index.

voir ici: Qu'est-ce qui fait une déclaration SQL Sargable?


0 commentaires

8
votes

Vous pouvez également contourner les fonctions entièrement en utilisant:

où (description = 'accepté' ou description est null)


0 commentaires

2
votes

Si vous essayez d'utiliser ceci dans l'état où l'état, utilisez est NULL, pas ISNULL

Sélectionnez le champ à partir du tableau dans lequel la description est NULL

ou le contraire

Sélectionnez le champ à partir du tableau où la description n'est pas NULL


0 commentaires

3
votes

Utilisation de

AND Description = 'Accepted'


1 commentaires

+1 Indiquez le saignement évident: les deux évaluent à la fausse / inconnue lorsque NULL qui est effectivement la même. J'aurais probablement négligé cela aussi.