10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 41.6 mb
PDF (A4)- 41.7 mb
手册页(TGZ)- 262.2 kb
手册页(Zip)- 372.2 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

8.2.1.15 IS NULL优化

MySQL可以执行相同的优化col_name为空它可以用来col_nameconstant_value.例如,MySQL可以使用索引和范围来搜索为空

例子:

Select * fromtbl_name在哪里key_col是零;Select * fromtbl_name在哪里key_col< = >零;Select * fromtbl_name在哪里key_colconst1key_colconst2key_col是零;

如果一个在哪里条款包括col_name为空声明为的列的条件非空,这个表达式被优化掉了。这种优化在可能产生列的情况下不会发生无论如何(例如,如果它来自一个表的右边左连接).

MySQL也可以优化组合col_nameexprcol_name为空,一种在已解析子查询中常见的形式。解释显示ref_or_null当使用此优化时。

这个优化可以处理一个为空对于任何关键部分。

一些优化的查询示例,假设列上有一个索引一个而且b的表t2

SELECT * FROM t1 WHERE t1.a=expr或t1。一个是零;SELECT * FROM t1, t2 WHERE t1.a=t2a或t2。一个是零;SELECT * FROM t1, t2 WHERE (t1.a=t2;a或t2。一个为空)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首先读取引用键,然后单独搜索带有键值。

优化只能处理一个为空的水平。在下面的查询中,MySQL只对表达式使用键查找(t1.a = t2。a和t2。一个为空)并不能使用关键部分上b

SELECT * FROM t1, t2 WHERE (t1.a=t2;a和t2。一个为空)或(t1.b=t2.b AND t2.b IS NULL);