22

这两个 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

NULLIF和的目的IFNULL不一样,所以性能比较没有任何意义。

NULLIF用于null在表达式具有特定值IFNULL时返回,而用于text在表达式为时返回null

例子:

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 回答