码迷,mamicode.com
首页 > 数据库 > 详细

sql优化

时间:2020-11-23 11:47:54      阅读:50      评论:0      收藏:0      [点我收藏+]

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

sql优化

一、概述

数据库优化主要有两个方向:即安全与性能

  1. show processlist(查看链接session状态)

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

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

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

  5. SESSION_ID; # 杀掉有问题的session

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

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

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

    4. 调整索引或语句本身。

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   

原文地址:https://www.cnblogs.com/gushiye/p/13998482.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!