2010-10-14 8 views
6

Alcuni articoli che ho trovato su Internet hanno confrontato ISNULL con COALESCE, quindi penso che la mia domanda sia un po 'diversa.COALESCE vs NON È un rendimento NULL sul controllo della stringa vuota

Mi chiedo quale sia il migliore in termini di prestazioni?

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

O

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

Altro che le prestazioni, ci sono altre preoccupazioni che dovrei considerare quando si decide?

EDIT:

sto usando Teradata.

risposta

7

Questa versione è leggermente più sargable e permette un indice di essere (potenzialmente) usata

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

Può essere semplificata per

SELECT * FROM mytable WHERE mycolumn <> ''; 

Il motivo per cui dico "leggermente" e "potenzialmente "è che il predicato di non uguaglianza può benissimo dire che si finisce comunque con una scansione completa.

+0

Come domanda successiva, se sapessimo che verrà utilizzato un indice, potremmo essere in grado di ottimizzare automaticamente sql (dietro le quinte) e tradurre COALESCE (mycolumn, '') <> '' in mycolumn NON è NULL e mycolumn <> ''. Ho un senso? – Russell

+0

Credo che potresti scoprire che il NUSI non può essere utilizzato per soddisfare un confronto di disuguaglianza. Vale la pena guardare EXPLAIN per confermare se l'ottimizzatore sta utilizzando o meno il NUSI. –

1

Si potrebbe anche considerare l'utilizzo di ANSI_NULL ON setting. Questo filtrerà implicitamente i valori nulli su una colonna in cui emetti un argomento di ricerca. Facendo ciò semplifica la tua query, non sono sicuro se lo rende più veloce. Logicamente in teoria dovrebbe però, dal momento che è necessario valutare meno argomenti del filtro e nessuna funzione viene utilizzata nella clausola where che dovrebbe consentire la massima selettività dell'indice. A titolo di esempio si potrebbe ri-factor la query come questa:

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

Spero che questo aiuta.

Problemi correlati