select * from demo_table where key1 = 'abc' OR key1 is NULL; 当使用二级索引而不是全表扫描的方式执行该查询时,对应的扫描区间就是[NULL,NULL]和[‘abc’,‘abc’],此时这种类型的查询所使用的访问方法就称为ref_or_null。 4、range 有时候,我们的查询方法很复杂,比如下面这个sql select * from de...
SELECT * FROM ref_table,other_table WHERE ref_table.key_column_part1=other_table.column AND ref_table.key_column_part2=1; ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 fulltext 使用FULLTEXT 索引执行连接。 ref_or_null SELECT * FROM ref_table WHERE key_column IS NULL...
type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是: system> const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index >ALL 一般来说,得保证查询至少达到range级别,最好能达到ref。 possible_keys 指出MySQL能使用哪个索引在该...
type显示的是访问类型,访问类型表示我是以何种方式去访问我们的数据访问的类型有很多,效率从最好到最坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL 一般情况下,得保证查询至少达到range级别,最好能达到ref。
NULL!='chen' 这个测试结果为NULL,为假,所以id=3这一行就不会被查出来。 所以最终的结果就只有id=2这一行的数据被查出来了。 那如果要达到我们的目地怎么办? 3306>select * from t1 where name!='chen' or name is null; +---+---+ | id | name...
开发过程中对业务表中查询sql分析sql执行计划(尤其是业务流水表),主要是查看sql执行计划,对sql进行优化。 explain执行计划关键属性 select_type,possible_keys,key,rows 1. (1) select_type 访问类型 system>const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquer...
Ref_or_null:当我们用索引列查询null的时候,效率就没有上面的高,于是就是当前等级。 Range:前面介绍都是等值查询,当前这个是范围查询, Index:当我们查询的条件没有符合最左索引,但是查询的列都包含复合索引,结果查询条件是从第二列开始,这时候他不会走复合索引,但是他会遍历复合索引。
unique_subquery — 在子查询中使用 eq_ref; ref_or_null —对 null 进行索引的优化的 ref; fulltext — 使用全文索引; ref — 使用非唯一索引查找数据; eq_ref —在 join 查询中使用主键或唯一索引关联; const — 将一个主键放置到 where 后面作为条件查询, MySQL 优化器就能把这次查询优化转化为一个常量...
ref_or_null: 相比于 ref 多扫描了一些值为 NULL 的二级索引列 range: 使用索引执行查询时,对应的扫描区间为若干个单点扫描区间或者范围扫描区间的访问 index: 使用覆盖索引,并扫描全部二级索引的访问。另外,当通过全表扫描对使用 InnoDB 引擎的表执行查询时,如果添加了ORDER BY 主键的语句,那么该语句在执行时也...
5、 ref_or_null该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。在解决子查询中经常使用该联接类型的优化。 上面这五种情况都是很理想的索引使用情况。 6、 index_merge该联接类型表示使用了索引合并优化方法。在这种情况下,key列包含了使用的索引的清单,key_len包含了使用的索引的最长的关键元素。