mysql索引选择原则
一、explain语句分析
1. 作用
1.1 通常用于sql语句的性能分析
1.2 打印出一条sql语句优化器的执行计划
1.3 索引使用情况
1.4 性能好不好
2. 语法
explain + 要操作的sql语句;
explain select * from article where status = 0;
3. 详细字段说明
explain分析sql语句:
id – select识别符。
这是select的查询序列号,id的值越大优先级别越高,越先被执行,如果id相同,执行顺序由上至下
select_type – 表示select语句的类型。
类型:
SIMPLE:表示最简单的查询,不包括连接查询与子查询
explain select * from user where id = (select id from where name="asi");
PRIMARY:最外层的查询 -- select * from user where id =();
SUBQUERY:子查询 -- select id from where name="asi"
explain select id from where name="asi" union all select id from where name="ayu";
UNION:合并 联合查询,union 后面的那张表就会表示成它
UNION RESULT:联合结果
DERIVED: 衍生查询-在select出一批自定义列的数据,概念上相当于一张表,但是该表只在语句执行过程出现和
table – 与查询语句相关的表。
partitions – 表分区,参数的使用
type – 表示的是表的连接类型。
类型:
①all:遍历全表数据查询
②index:只遍历索引树上的数据查询
③range:只检索给定范围的行,使用一个索引来选择行,条件过滤,索引定位
④ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
⑤null :MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。
⑥eq_ref: 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,
简单来说,就是多表连接中使用primary key或者 unique key作为关联条件
⑦const:当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询