您的位置:首页 > 博客中心 > 数据库 >

sql优化

时间:2022-03-15 21:06

  • show processlist(查看链接session状态)

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

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

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

  • 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

     

    热门排行

    今日推荐

    热门手游