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;  连查询请求都不允许

      

原文地址:https://www.cnblogs.com/linuxboke/p/5532204.html