mysql5.7官网直译SQL语句优化--IS NULL查询优化

48 篇文章 0 订阅
1.12 IS NULL Optimization is null  查询的优化
mysql能够完成同样的优化在col_name is null,通过采用col_name=constant_value来完成。例如,mysql可以使用索引或者是范围扫描来查找null值对于is null的查询。
例如:
SELECT * FROM tbl_name WHERE key_col IS NULL;


SELECT * FROM tbl_name WHERE key_col <=> NULL;


SELECT * FROM tbl_name
  WHERE key_col=const1 OR key_col=const2 OR key_col IS NULL;
如果where条件中包含了col_name is null条件,而其中列的值已经被声明为not null,那么表达式会优化。这种优化不会发生,当该列的值可能是null的情况下,例如,如果该列的值来自一个左连接的右侧的表。
mysql也能够优化对于结合col_name=expr or col_name is null,该形式通常被解析为子查询。当优化器被使用,那么EXPLAIN展示ref_or_null。
优化器能够处理任何关键字部分的is null。
一些会被优化的查询的例子,假设在表t2中a和b列中有一个索引。
SELECT * FROM t1 WHERE t1.a=expr OR t1.a IS NULL;


SELECT * FROM t1, t2 WHERE t1.a=t2.a OR t2.a IS NULL;


SELECT * FROM t1, t2
  WHERE (t1.a=t2.a OR t2.a IS NULL) AND t2.b=t1.b;


SELECT * FROM t1, t2
  WHERE t1.a=t2.a AND (t2.b=t1.b OR t2.b IS NULL);


SELECT * FROM t1, t2
  WHERE (t1.a=t2.a AND t2.a IS NULL AND ...)
  OR (t1.a=t2.a AND t2.a IS NULL AND ...);
ref_or_null处理过程为首先对参考索引值进行读取,然后在单独对行中有null值的情况做查询。


优化器能够处理值有一个is null级别,在下面的查询中,mysql只在表达式(t1.a=t2.a and t2.a is null)上使用索引查询,并且不能在索引的部分属性列b上使用索引。
SELECT * FROM t1, t2
  WHERE (t1.a=t2.a AND t2.a IS NULL)
  OR (t1.b=t2.b AND t2.b IS NULL);
到此关于is null的优化就结束了,接下来我们要说明的是1.13ORDER BY Optimization(ORDER BY 的优化)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值