mysql 查询优化 ~explain解读之type的解读

一 简介:今天咱们来聊聊explain中type的相关解读

二 类型:

    system: 表中只有一条数据. 这个类型是特殊的 const 类型.

 const: 针对主键或唯一索引的等值查询扫描, 最多只返回一行数据. const 查询速度非常快, 因为它仅仅读取一次即可

   eq_ref: 此类型通常出现在多表的 join 查询, 表示对于前表的每一个结果, 都只能匹配到后表的一行结果. 并且查询的比较操作通常是 =, 查询效率较高. 关键字:连接字段 主键或者唯一性索引

   ref : 此类型通常出现在多表的 join 查询, 针对于非唯一或非主键索引, 或者是使用了 最左前缀 规则索引的查询. 关键字:非唯一性索引

   ref_or_null:与ref方法类似,只是增加了null值的比较。

   range: 表示使用索引范围查询, 通过索引字段范围获取表中部分数据记录. 这个类型通常出现在 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN() 操作中.

   index: 表示全索引扫描(full index scan), 关键字:查询字段和条件都是索引本身

   index_merge:表示查询使用了两个以上的索引,最后取交集或者并集,常见and ,or的条件使用了不同的索引.效率不是很高 关键字:索引合并

   unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值

   index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值,可以使用索引将子查询去重。

   fulltext:全文索引检索,要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引

   all:这个就是全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录。

三 效率总结

   1 依次从好到差: 1 system,const,index  , range,index_merge,ALL 单独查询 

                                2 eq_ref,ref,ref_or_null all 多表join 查询

                                3  index_subquery   unique_subquery  子查询

   2  index_merge之外,其他的type只可以用到一个索引

  

 

posted @   开心的蛋黄派  阅读(4567)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示