В MySQL, который более эффективен: IFNULL или NULLIF?

Эти две функции MySQL выполняют одно и то же:

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

или

NULLIF(column_name, 'test') IS NULL

Какой из них эффективнее?

Ответ 1

Они оба эффективны друг с другом - функции имеют примерно одинаковые накладные расходы, как и другие.

Но это более эффективно, чем либо:

(column_name is null 
 or column_name = 'test')

Потому что функция не требует вызова.

Вы можете обнаружить, что более часто встречающийся тест сначала повышает производительность.


С такими вопросами простейший и надежный способ обнаружить относительную производительность - просто попробовать их и сравнить тайминги запросов. Удостоверьтесь, что у вас есть производственные и реалистично-оцененные наборы данных, чтобы тест был честным.

Ответ 2

Назначение NULLIF и IFNULL не одинаково, поэтому сравнение производительности не имеет никакого смысла.

NULLIF используется для возврата null, если выражение имеет определенное значение, тогда как IFNULL используется для возврата text, если выражение null.

Пример:

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

Так как null не имеет большого смысла для конечного пользователя.

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

Так как null имеет специальное значение в базе данных.

Ответ 3

они используются для разных целей, сравнение производительности не имеет никакого смысла.

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