【问题标题】:Has null instead of integer/string in the mysql WHERE clause any impact on the performance?mysql WHERE 子句中的 null 而不是整数/字符串对性能有任何影响吗?
【发布时间】:2022-07-07 01:12:47
【问题描述】:

对于以下查询:

SELECT some_value 
FROM some_table 
WHERE param_one='62627' 
AND param_two='1' 
AND param_three=QUESTIONABLE_VALUE

如果 QUESTIONABLE_VALUE 为 null 或整数/字符串,对性能有影响吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    IS NULL Optimization。 MySQL 可以对 col_name IS NULL 执行与 col_name = constant_value 相同的优化。例如,MySQL 可以使用索引和范围来搜索具有 IS NULL 的 NULL。

    你必须有一个复合索引

    `idx` (`param_one`,`param_two`,`param_three`)
    

    使用EXPLAIN 检查优化器在不同数据类型上的表现

    【讨论】:

      【解决方案2】:

      如果您有一个可能为 null 或非 null 的参数,并且您想匹配相同的数据,您将使用 <=> 运算符(null-safe 比较)。

      SELECT some_value 
      FROM some_table 
      WHERE param_one='62627' 
      AND param_two='1' 
      AND param_three <=> QUESTIONABLE_VALUE
      

      对于=,如果任一操作数为空,则结果将为空。

      【讨论】:

        猜你喜欢
        • 2011-05-01
        • 2017-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-07
        • 2013-12-05
        • 1970-01-01
        相关资源
        最近更新 更多