Mysql执行筹划(下)

打印 上一主题 下一主题

主题 998|帖子 998|积分 2994

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1、执行筹划概念

执行筹划是什么:使用EXPLAIN关键字可以模仿优化器执行SQL查询语句,从而知道MySQL是如那边理你的SQL语句的。
作用:分析你的查询语句或是表结构的性能瓶颈
语法:Explain + SQL语句

执行筹划输出内容介绍:表的读取顺序、数据读取操纵的操纵类型、哪些索引可以使用、哪些索引被实际使用、表之间的引用、每张表有多少行被优化器查询。
执行筹划包含的信息:
2、执行筹划各字段


2.5 执行筹划-possible_keys

possible_keys:可能使用的key索引。
Key:实际使用的索引。如果为NULL,则表现没有使用索引。
查询中若使用了覆盖索引,则该索引和查询的select字段重叠。


2.6 执行筹划-key_len



  • 表现索引中使用的字节数,可通过该列盘算查询中使用的索引的长度。在不损失精确性的环境下,长度越短越好。
  • key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表界说盘算而得,不是通过表内检索出的。
  • 根据key_len这个值,就可以判断索引使用环境,特别是在组合索引的时间,判断所有的索引字段是否都被查询用到。
  • char和varchar跟字符编码也有密切的联系,latin1占用1个字节,gbk占用2个字节,utf8占用3个字节。(不同字符编码占用的存储空间不同)
字符类型

字符类型-索引字段为char类型+不可为Null时:

索引字段为varchar类型+不可为Null时:

varchar(n)变长字段+不答应Null=n*(utf8=3,gbk=2,latin1=1)+2
索引字段为varchar类型+答应为Null时:

varchar(n)变长字段+答应Null=n*(utf8=3,gbk=2,latin1=1)+1(NULL)+2
数值类型

日期和时间:

key_len 总结:



  • 而NULL都需要1个字节的额外空间,所以索引字段最好不要为NULL,由于NULL让统计更加复杂而且需要额外的存储空间。
  • 复合索引有最左前缀的特性,如果复合索引能全部使用上,则是复合索引字段的索引长度之和,这也可以用来判断复合索引是否部分使用,还是全部使用。
  • 变长字段需要额外的2个字节(VARCHAR值生存时只生存需要的字符数,另加一个字节来记录长度(如果列声明的长度凌驾255,则使用两个字节),所以VARCAHR索引长度盘算时间要加2),固定长度字段不需要额外的字节。
2.7执行筹划-ref

Ref:显示索引的哪一列被使用了,如果可能的话,是一个常量。哪些列或常量被用于查找索引列上的值。

由key_len可知t1表的idx_col1_col2被充实使用,col1匹配t2表的col1,col2匹配了一个常量,即 'ac'。
2.8执行筹划-rows

根据表统计信息及索引选用环境,大致估算出找到所需的记录所需要读取的行数。

2.9执行筹划-Extra

Extra:包含不适合在其他列中显示但十分重要的额外信息






免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

罪恶克星

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表