【问题标题】:In MySQL, which is more efficient: IFNULL or NULLIF?在 MySQL 中,哪个更高效:IFNULL 还是 NULLIF?
【发布时间】:2013-03-31 05:43:55
【问题描述】:

这两个 MySQL 函数做同样的事情:

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

NULLIF(column_name, 'test') IS NULL

哪个效率更高?

【问题讨论】:

    标签: mysql ifnull null-test


    【解决方案1】:

    NULLIFIFNULL的用途不同,所以性能比较没有任何意义。

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

    示例:

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

    因为null 对最终用户没有多大意义。

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

    由于null在数据库中有特殊含义。

    【讨论】:

      【解决方案2】:

      它们用于不同的目的,性能比较没有任何意义。

      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

      【讨论】:

        【解决方案3】:

        它们都一样高效 - 函数的开销大致相同。

        但这比任何一个都更有效:

        (column_name is null 
         or column_name = 'test')
        

        因为不需要调用该函数。

        您可能会发现将更常见的测试放在首位可以提高性能。


        对于这样的问题,发现相对性能的最简单、更可靠的方法就是尝试它们并比较查询时间。确保您拥有生产规模和实际价值的数据集,以便测试是公平的。

        【讨论】:

          猜你喜欢
          • 2011-10-08
          • 2010-11-10
          • 2011-06-12
          • 2016-02-10
          • 2011-06-01
          • 2019-11-13
          • 2011-03-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多