我刚开始看执行计划的时候,还觉得是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
最后,若是在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