好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

sql优化

explain(分析查询计划),show index from table(分析索引)

通过执行计划判断,索引问题(有没有、合不合理)或者语句本身问题

show status like ‘%lock%‘; # 查询锁状态

SESSION_ID; # 杀掉有问题的session

查看slowlog,分析slowlog,分析出查询慢的语句。

按照一定优先级,进行一个一个的排查所有慢语句。

分析top sql,进行explain调试,查看语句执行时间。

调整索引或语句本身。

2.1 MySQL查询流程

① 客户端将查询发送到服务器;

 ② 服务器检查查询缓存,如果找到了,就从缓存中返回结果,否则进行下一步。

 ③ 服务器解析,预处理。

 ④ 查询优化器优化查询

 ⑤ 生成执行计划,执行引擎调用存储引擎API执行查询

 ⑥服务器将结果发送回客户端。

 

 

查询缓存 在解析一个查询语句之前,如果查询缓存是打开的,那么MySQL会优先检查这个查询是否命中查询缓存中的数据,如果命中缓存直接从缓存中拿到结果并返回给客户端。这种情况下,查询不会被解析,不用生成执行计划,不会被执行。

语法解析和预处理器 MySQL通过关键字将SQL语句进行解析,并生成一棵对应的“解析树”。MySQL解析器将使用MySQL语法规则验证和解析查询。

查询优化器 语法书被校验合法后由优化器转成查询计划,一条语句可以有很多种执行方式,最后返回相同的结果。优化器的作用就是找到这其中最好的执行计划。

查询执行引擎 在解析和优化阶段,MySQL将生成查询对应的执行计划,MySQL的查询执行引擎则根据这个执行计划来完成整个查询。最常使用的也是比较最多的引擎是MyISAM引擎和InnoDB引擎。mysql5.5开始的默认存储引擎已经变更为innodb了。

慢查询  

log-slow-queries=/data/mysqldata/slow-query.log
long_query_time=3

慢查询分析   

  如果慢查询日志中记录内容很多,可以使用mysqldumpslow工具(MySQL客户端安装自带)来对慢查询日志进行分类汇总。mysqldumpslow对日志文件进行了分类汇总,显示汇总后摘要结果。

  可以对多条log日志,分类汇总,比如得到。 

 得到返回记录集最多的10个查询。

  得到按照时间排序的前10条里面含有左连接的查询语句。

EXPLAIN执行计划分析

EXPLAIN可以帮助开发人员分析SQL问题,EXPLAIN显示了MySQL如何使用使用SQL执行计划,可以帮助开发人员写出更优化的查询语句。使用方法,在select语句前加上Explain就可以了:

EXPLAIN SELECT * FROM products

结果的列的说明如下

通过上面的对比测试可以看出,索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降。

索引的目的在于提高查询效率,大家可以回忆之前学习的全文检索技术。类似使用字典,如果没有目录(索引),那么我们要从字典的第一个字开始查询到最后一个字才能有结果,可能要把字典中所有的字看一遍才能找到要结果,而目录(索引)则能够让我们快速的定位到这个字的位置,从而找到我们要的结果。

 

join on 和in区别

in天然具备去重功能

join on不具备,需要借助于 distinct

 

sql优化

标签:inf   class   直接   比较   对比   建立   处理   去重   item   

查看更多关于sql优化的详细内容...

  阅读:30次