22

これら 2 つの MySQL 関数は同じことを行います。

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

また

NULLIF(column_name, 'test') IS NULL

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

4

3 に答える 3

24

どちらも互いに同じくらい効率的です。関数のオーバーヘッドは互いにほぼ同じです。

しかし、これは次のいずれよりも効率的です。

(column_name is null 
 or column_name = 'test')

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

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


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

于 2013-04-08T23:55:48.077 に答える
23

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

NULLIFnull、式が特定の値を持つ場合に返すために使用されますが、 は式が である場合IFNULLに返すために使用されます。textnull

例:

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

nullエンドユーザーにとってはあまり意味がありません。

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

以来null、データベースで特別な意味を持っています。

于 2015-07-16T15:00:42.927 に答える
5

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

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

于 2016-07-06T16:27:21.037 に答える