mysql执行计划

    我刚开始看执行计划的时候,还觉得是mysql计划如何去执行对数据库的增删改查,相似于触发器之类的东西,但通过学习才发现执行计划真的是跟触发器一毛钱关系都没有。mysql

什么时执行计划    

    什么是执行计划呢?我我的理解,执行计划是告诉数据库操做人员这条sql语句将要如何去查询。说白了,若是说sql语句是具体的执行行动,那么执行计划就是行动的预算,好比说执行的时候会不会用到索引,会不会用到分区等。sql

    咱们先建立一张表:    数据库

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` bit(1) DEFAULT b'0',
  PRIMARY KEY (`id`)
)

    咱们执行一条语句:   学习

select * from student where name="abc";

    如何查看执行计划呢,很简单,在执行的sql语句以前加上“desc”或“explain”便可。咱们具体查看下:spa

desc select * from student where name="abc" \G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: student
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 7
     filtered: 14.29
        Extra: Using where

    各个字段的含义:code

  1. id:查询序列号,select的识别符
  2. select_type:表示这条查询语句的类型,由于这条查询语句只涉及到了一个表:student,它在执行查询的过程既没有跟别的表一块儿进行联合查询,也没有进行子查询因此它的类型最后肯定成SIMPLE
  3. table:查询的表,就是在查询过程当中要涉及到的表,本表只有student所以没什么好说的。
  4. partitions:分区,就是说这个表若是进行了分区存储的话,这个个查询最后会落到哪一个分区之中。由于student表并无进行任何的分区处理,因此返回null
  5. type:表示在进行查询的时候查询的类型,怎么理解呢?我认为查询的类型是根据查询的范围分的,若是须要进行全表扫描,那么type就是ALL,而若是对表进行了分区,那么确定就就是range了。
  6. possible_keys:表示执行sql语句所查询到的行若是使用其它的select语句进行查询,可能使用到的索引值。
  7. key:在查询过程当中实际使用到的索引。
  8. key_len:表示mysql选择的索引字段按字节计算的长度。
  9. ref:表示使用哪一个列与索引一块儿作查询记录。
  10. row:表示在表中进行查询的时候必须(注意是必须)检查的行数。
  11. filtered:经过查询条件过滤的查询记录数在整张表中记录数的比例。
  12. Extra:在查询过程当中的详细信息。

    最后,若是在name字段上加上索引,会形成执行计划的变化,咱们也能够经过两个执行计划的不一样来加深对以上的字段的理解:索引

alter table student add index idx_name (name);
desc select * from student where name = "abc" \G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: student
   partitions: NULL
         type: ref
possible_keys: idx_name
          key: idx_name
      key_len: 23
          ref: const
         rows: 1
     filtered: 100.00
        Extra: NULL

    由此也能够看出索引在查询过程当中所起的做用和所占的份量it

相关文章
相关标签/搜索