2013-04-08 3 views

risposta

12

Sono entrambi efficienti quanto l'un l'altro - le funzioni hanno all'incirca le stesse spese generali l'una dell'altra.

ma questo è più efficiente di uno:

(column_name is null 
or column_name = 'test') 

Poiché la funzione non ha bisogno di essere richiamato.

È possibile trovare mettendo il test più comunemente incontrato prima migliora le prestazioni.


Con domande come questa, il modo più semplice e più affidabile per scoprire la performance relativa è quello di provare solo loro e confrontare tempi di query. Assicurati di avere set di dati di dimensioni reali e con valori realistici, quindi il test è corretto.

11

Scopo di NULLIF e IFNULL non è lo stesso, quindi il confronto delle prestazioni non ha alcun senso.

NULLIF è usato per restituire null se l'espressione ha un valore specifico, che IFNULL è usato per restituire text se expression è null.

Esempio:

SELECT IFNULL(field,'empty') from table1;

Poiché null non ha molto senso per l'utente finale.

insert into table1 (field) values (nullif(field,'empty'));

Dal null ha un significato speciale nel database.

2

sono utilizzati per scopi diversi, il confronto delle prestazioni non ha alcun senso.

select if(a,b,c); # a ? b : c  # if a!=0 and a is not null then b else c 

select ifnull(a,b); # a ? a : b  # if a is not null then a else b 

select nullif(a,b); # a=b ? null : a # if a=b then null else a 

http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html