SQL优化


目录:

  1. SQL优化的一般步骤

参考/来源:

SQL优化的一般步骤

  1. 通过慢查日志等定位那些执行效率较低的 SQL 语句

  2. explain 分析SQL的执行计划,需要重点关注 type、rows、filtered、extra

  3. show profile 分析

    了解 SQL 执行的线程的状态及消耗的时间。

    默认是关闭的,开启语句“set profiling = 1;”

    SHOW PROFILES ;
    SHOW PROFILE FOR QUERY  #{id};
  4. trace

    trace分析优化器如何选择执行计划,通过 trace 文件能够进一步了解为什么优惠券选择 A 执行计划而不选择 B 执行计划。

    set optimizer_trace="enabled=on";
    set optimizer_trace_max_mem_size=1000000;
    select * from information_schema.optimizer_trace;
  5. 确定问题并采用相应的措施

    • 优化索引
    • 优化 SQL 语句:修改 SQL、IN 查询分段、时间查询分段、基于上一次数据过滤
    • 改用其他实现方式:ES、数仓等
    • 数据碎片处理

书写高质量SQL的30条建议

书写高质量SQL的30条建议

优化慢SQL

8种最坑SQL写法

Order by 底层原理和SQL优化

order by 底层原理和优化查询案例

MySQL分页查询优化

  1. 一般来说,是将上一页的最大值当成参数作为查询条件的,通过where条件,快速定位起始位置。

    SELECT   *
    FROM     operation
    WHERE    type = 'SQLStats'
    AND      name = 'SlowLog'
    AND      create_time > '2017-03-16 14:00:00'
    ORDER BY create_time limit 10;

    在新设计下查询时间基本固定,不会随着数据量的增长而发生变化。

  2. 索引覆盖+子查询优化

    因为我们有主键id,并且在上面建了索引,所以可以先在索引树中找到开始位置的 id值,再根据找到的id值查询行数据。

    /*子查询获取偏移4800000条的位置的id,在这个位置上往后取25*/
     SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depname
     from emp a left join dep b on a.depno = b.depno
     where a.id >= (select id from emp order by id limit 4800000,1)
     order by a.id limit 25;

其他可以参考:


文章作者: 小小千千
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小小千千 !
评论
  目录