mariadb的explain分析及InnoDB存储引擎
Posted Howareyou?
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mariadb的explain分析及InnoDB存储引擎相关的知识,希望对你有一定的参考价值。
id: 当前查询语句中,每个SELECT语句的编号, id: 1 表示简单类型的查询
复杂类型的查询有三种:简单子查询,用于FROM中的子查询,联合查询:UNION
注意:UNION查询的分析结果会出现一张额外匿名临时表
select_type:
简单查询为SIMPLE
复杂查询:
SUBQUERY: 简单子查询
DERIVED: 用于FROM中的子查询
UNION:UNION语句的第一个之后的SELECT语句
UNION RESULT: 匿名临时表
简单子查询示例:
PRIMARY:主查询或整个查询语句的最外层查询
SUBQUERY:用在where子句中的子查询
联合查询示例:
table:SELECT语句关联到的表
type:关联类型,或访问类型,即MariaDB决定的如何去查询表中的行的方式
ALL: 全表扫描
index:根据索引的次序进行全表扫描;如果在Extra列出现“Using index”表示了使用覆盖索引,而非全表扫描
range:有范围限制的根据索引实现范围扫描;扫描位置始于索引中的某一点,结束于另一点
ref: 根据索引返回表中匹配某单个值的所有行
eq_ref:仅返回一行,但需要额外与某个参考值做比较
const, system: 直接返回单个行
性能从上到下依次提升
possible_keys:查询可能会用到的索引
key: 查询中使用了的索引
key_len: 在索引中使用的字节数
ref: 在利用key字段所表示的索引完成查询时所有的列或某常量值
rows:MariaDB估计为找所有的目标行而需要读取的行数
Extra:额外信息
Using index:mysql将会使用覆盖索引,以避免访问表
Using where:MySQL服务器将在存储引擎检索后,再进行一次过滤
Using temporary:MySQL对结果排序时会使用临时表
Using filesort:对结果使用一个外部索引排序
InnoDB:
处理大量的短期事务
数据存储于“表空间(table space)”中
(1) 所有InnoDB表的数据和索引放置于同一个表空间中
表空间文件:datadir定义的目录下
数据文件:ibddata1, ibddata2, ...
(2) 每个表单独使用一个表空间存储表的数据和索引
innodb_file_per_table=ON 查看是否开启(show global variables like \'innodb_file_%\';)
数据文件(存储数据和索引):tbl_name.ibd
表格式定义:tbl_name.frm
lock table students read; 只允许对students表查询(不过仍然可以从缓存中取数据) 释放:unlock table;
lock table students write; 连查询请求都不允许
以上是关于mariadb的explain分析及InnoDB存储引擎的主要内容,如果未能解决你的问题,请参考以下文章