これらの2つのMySQL関数は同じことをします:
IFNULL(column_name, 'test') = 'test'
または
NULLIF(column_name, 'test') IS NULL
どちらがより効率的ですか?
それらは両方とも互いに同じくらい効率的です-関数は互いにほぼ同じオーバーヘッドを持っています。
しかし、これはどちらよりも効率的です。
(column_name is null
or column_name = 'test')
関数を呼び出す必要がないためです。
より一般的に遭遇するテストを最初に置くと、パフォーマンスが向上する場合があります。
このような質問の場合、相対的なパフォーマンスを見つける最も簡単で信頼性の高い方法は、それらを試してクエリのタイミングを比較することです。テストが公平になるように、本番サイズで現実的な値のデータセットがあることを確認してください。
NULLIF
とIFNULL
の目的は同じではないため、パフォーマンスの比較は意味がありません。
NULLIF
は式に特定の値がある場合はnull
を返すために使用され、IFNULL
は式がtext
の場合はnull
を返すために使用されます。
例:
SELECT IFNULL(field,'empty') from table1;
null
は、エンドユーザーにとってあまり意味がないためです。
insert into table1 (field) values (nullif(field,'empty'));
null
はデータベースで特別な意味を持っているので。
それらは異なる目的で使用され、パフォーマンスの比較は意味がありません。
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