MySQL日记——查询优化

作者: 饥渴计科极客杰铿 | 来源:发表于2017-05-04 06:46 被阅读70次

数据库优化一般要执行以下几个步骤

  1. 观察,至少跑1天,看看生产的慢SQL情况
  2. 开启慢查询日志,设置阀值,并将它抓取出来
  3. explain+慢SQL分析
  4. show profile查询SQL在MySQL服务器里面执行的细节和生命周期
  5. 数据服务器的参数调优

永远小表驱动大表

当B表的数据小于A表的数据集时,用in由于exists。

select * from A where id in (select id from B)

当B表的数据大于A表的数据集时,用exists由于in。

select * from A where exists (select 1 from B where B.id = A.id)

ORDER BY关键字优化

  1. ORDER BY子句,尽量使用index方式排序,避免使用fileSort方式排序
    ORDER BY语句使用索引最左前列
    使用WHERE子句与ORDER BY子句条件列组合满足索引最左前列
  2. 尽可能在索引列上完成排序操作,遵照索引建的最佳左前缀
  3. 如果不在索引列上,filesort有两种算法:1.单路排序2.双路排序

索引为key a_b_c(a,b,c)
ORDER BY能使用索引最左前缀

ORDER BY a
ORDER BY a,b
ORDER BY a,b,c
ORDER BY a DESC,b DESC,c DESC

如果WHERE使用索引的最左前缀定义为常量,则ORDER BY能使用索引

WHERE a=const ORDER BY b,c 
WHERE a=const AND b=const ORDER BY c 
WHERE a=const AND b>const ORDER BY b,c

不能使用索引进行排序

ORDER BY a ASC,b DESC,c DESC    /*排序不一致*/
WHERE g=const ORDER BY b,c      /*丢失a索引*/
WHERE a=const ORDER BY c        /*丢失b索引*/
WHERE a=const ORDER BY d        /*d不是索引的一部分*/
WHERE a in(...) ORDER BY b,c    /*对于排序来说,多个相等条件也是范围查询*/

提高ORDER BY速度

  1. ORDER BY时select*是一个大忌,只Query需要的字段,这点非常重要。在这里的影响是:
    1.1 当Query的字段大小总和小于max_length_for_sort_data而且排序字段不是TEXT|BLOB类型时,会用改进后的算法——单路排序,否则用老算法——多路排序
    1.2 两种算法的数据都可能超出sort_buffer的容量,超出之后,会创建tmp文件进行合并排序,导致多次I/O,但是单路排序算法的风险会更大一些,所以要提高sort_buffer_size
  2. 尝试提高sort_buffer_size
    不管用哪种算法,提高这个参数都会提高效率,当然要根据系统的能力去提高,因为这个参数针对每个进程
  3. 尝试提高max_length_for_sort_data
    提高这个参数,会增加用改进算法的概率。但是如果设太高,数据总容量超出sort_buffer_size的概率就增大,明显症状是高的磁盘I/O活动和低的处理器使用效率

GROUP BY关键字优化

  1. GROUP BY实质是先排序后进行分组,遵照索引建的最佳左前缀
  2. 当无法使用索引列,增大max_length_for_sort_data参数的设置+增大sort_buffer_size参数的设置
  3. WHERE高于HAVING,能卸载WHERE限定的条件就不要用HAVING限定了

相关文章

  • MySQL性能调优

    MYSQL查询语句优化 mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬...

  • MySQL

    MySQL查询优化之道

  • mysql优化

    MYSQL优化 为查询缓存优化你的查询 EXPLAIN你的SELECT查询。根据结果给出分析相应的查询优化 当只要...

  • 9月17-MySQL性能优化

    MySQL性能优化策略 1、MySQL内核架构 2、索引原理与查询优化 加速MySQL高效查询数据的数据结构 二分...

  • MySQL日记——查询优化

    数据库优化一般要执行以下几个步骤 观察,至少跑1天,看看生产的慢SQL情况 开启慢查询日志,设置阀值,并将它抓取出...

  • MySQL 索引及查询优化总结-2018-03-20

    MySQL 索引及查询优化总结 文章《MySQL查询分析》讲述了使用MySQL慢查询和explain命令来定位my...

  • mysql性能优化-慢查询分析、优化索引和配置

    mysql性能优化-慢查询分析、优化索引和配置 分类:Mysql/postgreSQL 目录 一、优化概述 二、查...

  • MySql高级之性能分析(四)

    1.MySql Query Optimizer:查询优化器。 ​ 1). Mysql中有专门负责优化SELECT语...

  • MySQL大数据量查询方法及优化

    看了一些关于MySQL查询的优化方法,发现MySQL的优化最离不开的就是索引,还有其他优化的小建议。 查询方法: ...

  • 11-mysqlSQL分析

    六星教育 - java-mysql优化1909 SQL优化 所谓SQL优化:基于MySQL的优化器查询规则来优化S...

网友评论

    本文标题:MySQL日记——查询优化

    本文链接:https://www.haomeiwen.com/subject/mjnktxtx.html