0%

执行计划

文章字数:817,阅读全文大约需要3分钟

key_len

  • 表示索引使用的字节数,可通过计算查询中使用的索引长度。不损失精度准确性情况下,越短越好
  • 显示的是值为索引字段的最大可能长度,而不是实际长度,即根据表定义计算得出的

key_len字符型

类型|大小|用法
CHAR|0-255|定长字符串
WARCHAR|0-65535|变长字符串

  • CHAR UTF-8一个字符大小为3
  • CHAR UTF-8如果允许为null长度+1
  • VARCHAR UTF-8CHAR的基础上+2表示变长的大小

key_len数值型

类型|大小|有符号范围
TINYINT|1|-128,127
SMALLINT|2|-3276,32767
MEDIUMINT|3|-8388608,8388707
INT/INTEGER|4|-2147483648,2147483647
BIGINT|8|
FLOAT|4|
DOUBLE|8|

key_len日期

类型|大小
DATE|3
TIME|3
YEAR|1
DATETIME|8
TIMESTAMP|4

  • datetime5.6中长度是5个字节
  • datetime5.5中长度是8个字节

key_len总结

  • 变长需要额外2个字节记录长度
  • null需要1个字节的额外空间,索引最好不要null
  • 复合索引最左前缀的特性,key_len可以看复合索引是否全部使用

ref

  • 显示索引的那一列被使用了,如果有可能,是一个常数。那些列或者常量被用于查找索引列上的值。
  • const表示使用了常量
  • db.table.id那个数据库的那个表的那个字段使用了索引

rows

  • 根据表信息统计和索引选用,估算找到信息大致所需读取的行

Extra

  • 包含护士和在其他列中显示但十分重要的信息
  • Using filesort使用文件排序,即没有用到索引,需要使用外部索引,进利用表内索引无法按顺序读取。此时需要在语句中加上索引的wheregroup by
  • Using temporary使用了临时表用于加快查询,在group by最左边加入where in的字段,可以消除临时表。子查询优化成连表…
  • Using index覆盖索引,查询的所有字段都是索引,就可以直接从索引读取。
  • Using where使用了where查询

type

效率顺序,最好是ref以上

  • system
  • const
  • eq_ref
  • ref 使用了条件索引
  • range
  • index 扫描了整个索引文件(全表扫描的一种)
  • ALL