mysql解析器对查询优化_通过Mysql解析工具Explain进行的索引优化

1.explain 分析语句

explain:通常应用于sql语句的性能分析

比如:

EXPLAIN SELECT * from t where sex='1'

id:select识别符

select_type:select语句类型

SIMPLE:表示最简单的查询

EXPLAIN SELECT * from t where id = (select id from t where age=20);

PRIMARY:主查询

SUBQUERY:子查询

explain select id from t where age = 20

union all

select id from t where age = 10

UNION:合并查询

table:与查询语句相关的表

partitions:表分区

type:表的连接类型all index range ref null const

all:全表匹配

index:只对索引树上的数据的访问查询

range:经过条件的过滤,并且只在索引树上定位

ref:表连接匹配的条件,在索引树上查到数据

null:mysql分解语句,不需要访问索引树,通过单独的索引来查找完成

const 主键转换条件

possible_keys:可能会使用到的索引

key:使用的索引

key_len:使用的索引长度(按照字节)

ref:使用哪个列一起进行的查询

EXPLAIN SELECT * from t where id='1'

const 条件为主键的查询

rows:查询sql语句扫描的数据量,不会很精确,属于约等于

Extra:一些额外的信息(性能从上倒下依次变差)

using index: 表示sql使用索引并且是覆盖索引的方式进行查询

using where: useing index:

单独出现 using where: 根据条件进行过滤

using index condition 使用了索引,但是需要回表进行数据查询

using filesort:在使用索引内进行排序时(order by 索引列)

using temporary:当sql中存在去重,排序,合并,分组(性能很低)

2.联合索引结构与最左匹配原则

二分查找,btree二分法

show index from t; idx_class_sex_ages

explain select * from t where class="starchy" and age=20 and sex=1;

explain select * from t where class="starchy" and sex=1 and age=20;

explain select * from t where sex=1 and age=20 and class="starchy";

explain select * from t where age=20 and sex=1 and class="starchy";

匹配最左边的列 idx_class_sex_ages => (class) (class,sex) (class,sex,age)

只要条件中存在上面的三种索引列,那么sql语句将就将就可以命中索引

总结:只要是按照了索引创建顺序来编写的where 条件,那么就可以使用到这个索引,并且大几率是覆盖索引,也符合最左匹配原则

而最左匹配原则与条件中的字段顺序无关,只要需要按照索引创建的顺序最左字段存在即可

3.mysql索引优先使用对象

alter table t add index idx_class(class);

alter table t add index idx_age(age);

alter table t add index idx_sex(sex);

explain select * from t where class="abc" group by sex order by id;

explain select * from t where class="abc" group by sex;

explain select * from t where class="abc" order by id;

explain select * from t group by sex order by id;

mysql优化器在选择索引时的策略 where > group by > order by

优化方案: 将条件字段以及分组和排序字段,都建立在索引中

4.在哪些情况下用索引

注意:索引字段的选择,一般会选择推荐重复比较少的字段

例如:

性别字段 0男 1女 2保密 则数据库中这个字段中三个值经常重复的数据,就不推荐使用

如果项目需求(可以考虑联合索引)

1.唯一字段可以建立单索引(字段不允许重复例如id)

2.非唯一字段可以考虑建立联合索引

3.索引个数: 最佳是不超出6个,勉强可以是10个=》如果不够还要加索引,建议垂直分表

4.索引的使用遵循最左匹配原则其次就是覆盖索引

5.索引的选择字段尽量要小一些 int varchar(10) char(5) 如果有文本,可以索引存储文本路径

6.避免like between 等范围查询

explain select * from t where class like 'abc%’;只有这个可以有索引命中

explain select * from t where class like '%abc%';

explain select * from t where class like '%abc';

后面两个都没有索引查询了

7.尽量多使用explain进行分析

8.优先考虑建立联合索引,索引的字段不要包含null 活着 ‘’

课程大纲: 第1课 数据库与关系代数 综述数据库、关系代数、查询优化技术 综述数据库调优技术 预计时间1小时 第2课 数据查询优化技术总揽 综述查询优化技术范围,包括查询重用、查询重写规则、查询算法优化、并行查询优化等 综述逻辑查询优化,包括子查询优化、视图重写、等价谓词重写、条件化简、连接消除、非SPJ的优化等 综述逻辑物理优化,包括单表扫描算法、两表连接算法、多表连接算法、基于代价的算法等 初步理解MySQL查询执行计划。 预计时间1小时 第3课 查询优化技术理论与MySQL实践(一)------子查询优化(一) 第4课 查询优化技术理论与MySQL实践(二)------子查询优化(二) 从理论看,子查询包括的内容和范围,立清晰的概念 从实践看,MySQL的子查询优化技术的内容和范围,明确掌握子查询优化手段 预计时间2小时,每小时一个课程段(子查询是SQL查询优化的重点内容,务必掌握好) 第5课 查询优化技术理论与MySQL实践(三)------视图重写与等价谓词重写 什么是视图重写?哪些类型的视图可以被优化MySQL是怎么优化视图的?从而明白在MySQL中怎么写与视图相关的查询语句才能有好的效果? 什么是等价谓词重写?MySQL中怎么写WHERE子句有利于提高查询效率? 预计时间1小时 第6课 查询优化技术理论与MySQL实践(四)------条件化简 什么是条件化简?MySQL中对什么样的条件自动进行优化?如何写出可利用索引的条件语句? 预计时间1小时 第7课 查询优化技术理论与MySQL实践(五)------外连接消除、嵌套连接消除与连接消除 连接方式有些什么类型?不同类型的连接又是怎么优化的?外连接优化的条件是什么?MySQL中怎么写出可优化的连接语句?MySQL是否支持嵌套连接消除?MySQL是否支持连接消除?MySQL中书写SQL连接查询语句时的优化技巧。 预计时间1小时 第8课 查询优化技术理论与MySQL实践(六)------数据库的约束规则与语义优化 数据库的参照完整性(CHECKt NULL等)。什么是语义优化MySQL是否支持语义优化?怎么利用语义优化的思路人工进行SQL语句的优化? 预计时间1小时 第9课 查询优化技术理论与MySQL实践(七)------非SPJ的优化 什么是非SPJ优化? 从理论看,GROUP BY、ORDER BY、LIMIT、DISTINCT等怎么被优化MySQL中:GROUP BY是怎么优化的?ORDER BY是怎么被优化?LIMIT是怎么被优化?DISTINCT是怎么被优化? 非SPJ优化索引的关系。 预计时间1小时 第10课 MySQL物理查询优化技术概述 从理论看,物理查询优化技术的范围。 从MySQL实践看,怎么利用物理查询优化技术对SQL查询语句调优? 本节预计会承接第9课的部分内容。 预计时间1小时 第11课 MySQL索引的利用、优化MySQL索引的角度出发,看各种SQL查询语句的优化怎么进行?(以前都是从语句的角度看怎么优化,现在站在索引的角度去总结SQL查询语句的优化) 预计时间1小时 第12课 表扫描与连接算法与MySQL多表连接优化实践 MySQL的单表扫描算法。MySQL的两表连接算法。MySQL的多表连接算法。 MySQL的多表连接的优化技巧。 预计时间1小时 第13课 查询优化的综合实例(一)------TPCH实践(一) 第14课 查询优化的综合实例(一)------TPCH实践(二) 以TPC-H国际标准的22条查询语句为实例,综合前面课程的内容,把所学的知识用于实践,进行综合的实战演练。 预计时间2小时(每个课时为1个小时) 第15课 关系代数对于数据库的查询优化的指导意义------查询优化技术总结 再次回到理论,从理论的高度总结关系代数理论与MySQL查询优化实践的关系。真正认识、掌握MySQL查询优化技术,大步流星步入查询优化的高手之列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值