web-dev-qa-db-ja.com

MySQLでは、どちらがより効率的ですか:IFNULLまたはNULLIF?

これらの2つのMySQL関数は同じことをします:

IFNULL(column_name, 'test') = 'test'

または

NULLIF(column_name, 'test') IS NULL

どちらがより効率的ですか?

18
user2259597

それらは両方とも互いに同じくらい効率的です-関数は互いにほぼ同じオーバーヘッドを持っています。

しかし、これはどちらよりも効率的です。

(column_name is null 
 or column_name = 'test')

関数を呼び出す必要がないためです。

より一般的に遭遇するテストを最初に置くと、パフォーマンスが向上する場合があります。


このような質問の場合、相対的なパフォーマンスを見つける最も簡単で信頼性の高い方法は、それらを試してクエリのタイミングを比較することです。テストが公平になるように、本番サイズで現実的な値のデータセットがあることを確認してください。

16
Bohemian

NULLIFIFNULLの目的は同じではないため、パフォーマンスの比較は意味がありません。

NULLIFは式に特定の値がある場合はnullを返すために使用され、IFNULLは式がtextの場合はnullを返すために使用されます。

例:

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

nullは、エンドユーザーにとってあまり意味がないためです。

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

nullはデータベースで特別な意味を持っているので。

16
Ashutosh Nigam

それらは異なる目的で使用され、パフォーマンスの比較は意味がありません。

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

4
PLA