Mysql的访问类型type总结
Type访问类型,效率低到⾼如下:
all < index < range < index_subquery < unique_subquery < index_merge < ref_or_null < ref < eq_ref < const < system
1. all
全表扫描,Mysql遍历全表来到匹配的⾏,在⼤数据量的时候效率极低。
2. index
索引全扫描。Mysql遍历整个索引来查询匹配的⾏。根据Extra的内容分以下⼏种情况:
Using Index:表⽰查询的列全在索引中,且where筛选条件符合索引的前导列原则,即使⽤了覆盖索引(Covering Index),避免了访问表的数据⾏,效率⾼。使⽤索引来直接获取列的数据,⽽不需回表。如果同时出现Using where,表明索引被⽤来执⾏索引键值的查。
如果没有同时出现Using where,表明索引⽤来读取数据⽽⾮执⾏查动作。Using Index就是只需使⽤索引就可以查到所需的字段。
覆盖索引(Covering Index):也叫索引覆盖。就是select列表中的字段,只⽤从索引中就能获取,不必根据索引再次读取数据⽂件,换句话说查询列要被所建的索引覆盖。
注意:
a、如需使⽤覆盖索引,select列表中的字段只取出需要的列,不要使⽤select *
b、如果将所有字段都建索引会导致索引⽂件过⼤,反⽽降低crud性能
Using Where:使⽤了where筛选条件。
Using Index & Using Where:a、查询的列被索引覆盖,并且where筛选条件是索引列之⼀但不是索引的前导列,Extra中为Using where; Using index,意味着⽆法直接通过索引查来查询到符合条件的数据。b、查询的列被索引覆盖,并且where筛选条件是索引列前导列的⼀个范围,同样意味着⽆法直接通过索引查查询到符合条件的数据。
Using filesort:Using filesort通常出现在order by,当试图对⼀个不是索引的字段进⾏排序时,mysql就会⾃动对该字段进⾏排序,这个过程就称为“⽂件排序”。
mysql交集查询
Using temporary:表⽰在查询过程中产⽣了临时表⽤于保存中间结果。mysql在对查询结果进⾏排序
时会使⽤临时表,常见于group by。group by的实质是先排序后分组,同order by⼀样,group by和索引息息相关。出现Using temporary意味着产⽣了临时表存储中间结果并且最后删掉了该临时表,这个过程很消耗性能。
会产⽣临时表的情况:
a、对⼀个没有索引的字段进⾏分组,会产⽣临时表。
b、当order by⼦句和group by⼦句的字段不同时就会产⽣临时表。
c、当⽤left join时,若order by⼦句和group by⼦句都来⾃于从表时会产⽣临时表。
不会产⽣临时表的情况:
a、对⼀个有索引的字段进⾏分组就不会产⽣临时表。
b、当order by⼦句和group by⼦句的字段相同时不会产⽣临时表。
Null:查询列有些没有创建索引,需要回表来查询未被索引覆盖的字段(不是纯粹⽤了索引,也不是完全没⽤到索引)
3. range
索引范围扫描。常见于:<、<=、>、>=、between
4. index_subquery
利⽤索引关联⼦查询,不再全表扫描⼦查询中的表。常见于in形式⼦查询或者in常数列表。例如:
select * from t1 where context in (select context from t2)
t2的context字段建⽴索引
5. unique_subquery
类似于index_subquery,只是索引⽤到的是唯⼀索引。
6.index_merge
在查询过程中需要多个索引组合使⽤,通常出现在有or的关键字的sql中。(对多个索引分别进⾏了条件的查询,最后对这⼏个查询的结果进⾏合并交集运算)
7. ref_or_null
类似ref。区别是他会额外的搜索包含null的记录,他会对其进⾏⼀些优化。(例如:select * from m_user where age = 18 and name is null)
8. ref
使⽤⾮唯⼀索引扫描或唯⼀索引的前缀扫描,返回匹配某个单独值的记录。
9. eq_ref
类似ref,区别就在使⽤的索引是唯⼀索引,对于每个索引键值,表中只有⼀条记录匹配;简单来说,就是多表连接中使⽤primary key或者unique index作为关联条件。
10. const
查询条件是主键或者⾮NULL的UNIQUE索引,因此结果只有⼀条,同时优化过程中查询列值会转成常量。
11. system
表中数据只有⼀⾏的情况。
12. NULL
不⽤访问表就可以直接得到结果。(例如:SELECT 1)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。