Question

Quelques articles que j'ai trouvé sur internet ISNULL par rapport à COALESCE, donc je pense que ma question est un peu différent.

Je me demande ce qui est mieux en termes de performance

SELECT * FROM mytable WHERE mycolumn IS NOT NULL AND mycolumn <> '';

ou

SELECT * FROM mytable WHERE COALESCE(mycolumn,'') <> '';

autres que la performance, sont-il d'autres préoccupations que je dois prendre en considération au moment de décider?

EDIT:

J'utilise Teradata.

Était-ce utile?

La solution

Cette version est un peu plus sargable et permet un indice d'être (potentiellement) utilisé

SELECT * FROM mytable WHERE mycolumn IS NOT NULL AND mycolumn <> '';

Il peut être simplifié à

SELECT * FROM mytable WHERE mycolumn <> '';

La raison pour laquelle je dis « un peu » et « potentiellement » est que le prédicat non d'égalité peut bien signifier que vous finissez avec une analyse complète de toute façon.

Autres conseils

Vous pouvez également envisager d'utiliser le ANSI_NULL ON Réglage . Cela va filtrer implicitement des valeurs NULL sur une colonne où vous émettez un argument de recherche. Faire cela simplifie votre requête, je ne sais pas si elle le rend plus rapide. Logiquement, en théorie, il devrait cependant, puisque les arguments moins de filtre doivent être évalués et aucune fonction sont utilisées dans la clause where qui devrait permettre la sélectivité de l'index complet. À titre d'exemple, vous pouvez re-facteur votre requête comme ceci:

SET ANSI_NULLS ON;
SELECT * FROM mytable WHERE NOT mycolumn = '';

J'espère que cette aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top