Эти две функции MySQL выполняют одно и то же:
IFNULL(column_name, 'test') = 'test'
или
NULLIF(column_name, 'test') IS NULL
Какой из них эффективнее?
Эти две функции 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