加入收藏 | 设为首页 | 会员中心 | 我要投稿 瑞安网 (https://www.ruian888.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql中执行计划索引的案例分析

发布时间:2022-01-10 15:59:12 所属栏目:MySql教程 来源:互联网
导读:小编给大家分享一下mysql中执行计划索引的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 首先执行计划包含的信息: id, select_type, table, partitions, type,
       小编给大家分享一下mysql中执行计划索引的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
 
      首先执行计划包含的信息:
 
      id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, Extra
 
      select 查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序
 
存在三种情况:
 
a)  id相同,表示表(table字段)执行顺序从上到上
 
b)  id不同,如果是子查询,id越大表执行的优先级越高
 
c)  id有相同也有不同,id相同,可认为是同一组,从上至下顺序执行,所有组中id越大执行优先级越高
 
select_type
 
主要有六种
 
SIMPLE              简单查询,不包括自查询及union
 
PRIMAY              查询中包含任何复杂的子部分的最外层查询的标记
 
SUBQUERY       在select或where子句列表中包含自查询
 
DERIVED           在from列表中包括的子查询标记为derived(衍生)mysql递归查询这些子查询并放在临时表里
 
UNION               如果第二个select出现在union之后则标记为union,
 
                            如果union包含在from子句的子查询中,外层的select标记为derived
 
UNION RESULT union结果的合并
 
table
 
对应的表
 
type
 
访问类型
 
效率 system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL
 
主要使用到的:system>const>eq_ref>ref>range>index>ALL
 
system  表只有一行记录(系统表)
 
const    索引常量
 
eq_ref  唯一性索引扫描
 
ref        非唯一性索引扫描
 
range  范围索引扫描 (索引列使用 between in等范围限定)
 
index  全索引扫描
 
ALL    全表扫描
 
possible_keys
 
查询涉及到的字段上存在的索引一个或多个(可能用到的,但不一定会使用)
 
keys
 
实际使用的索引
 
key_len
 
索引使用的字节数,可通过该列计算查询中使用索引的长度,同样查询结果条件下(不损失精度的条件下),长度越小越好
 
显示的值为索引的最大可能长度,非实际长度,即key_len通过表定义计算所得非表内检索值
 
ref
 
显示索引用到的列(或用到的是常量) 例 db.table.col ,const
 
rows
 
根据表统计信息及索引选用情况,大致估算出找到所需的记录需要读取的行数
 
Extra
 
其他信息
 
1、Using filesort  
 
使用外部的索引排序(文件排序),而不是按照索引的排序进行读取
 
例如使用复合索引的表,查询排序时只使用了复合索引的其中一列,可能会造成文件排序。需尽量避免的情况
 
2、Using temporary  
 
使用了临时表保存中间结果,常见于order by 及group by
 
消耗资源,需避免的情况
 
order by 及group by 语句中使用覆盖索引
 
3、Using index
 
使用的覆盖索引,避免访问表的数据行
 
同时出现using where,表示索引用来查询索引键值的查找(如查询结果中的列被索引列覆盖)
 
如果没有出现using where,表示索引直接用来读取数据,不执行查找动作
 
*覆盖索引(Covering index)
 
select 的数据列只从索引中获得,不必查找数据行
 
4、Using where
 
5、Using join buffer
 
使用了连接缓存
 
6、Impossible where
 
where 子句结果false
 
7、select table optimized away
 
在没有group by子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM 存储引擎优化COUNT(*) 操作,不必等到执行阶段再进行计算,查询执行接话生成阶段即可完成优化
 
8、distinct
 
优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作
 
以上是“mysql中执行计划索引的示例分析”这篇文章的所有内容,感谢各位的阅读!

(编辑:瑞安网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读