• 数据库 | SQL 诊断优化套路包,套路用的对,速度升百倍


    本文出自头条号老王谈运维,转载请说明出处。

    前言

    慢 SQL 诊断优化套路包,套路用的对,速度升百倍

    在DBA的日常工作中,调整个别性能较差的SQL语句是一项富有挑战性的工作。面对慢SQL,一些DBA会心烦,会沮丧,会束手无措,也会沉着冷静、斗智斗勇!当中的关键在于数据库管理员如何分析得出SQL语句的执行计划和如何从SQL语句的执行计划中发现问题。

    下面老王就慢SQL的诊断和优化分享一些常用的套路~

    慢SQL诊断

    系统层面

    检查系统服务器运行情况,磁盘 I/O 等;

    数据库层面:

    1、对于MySQL来说,通过慢日志定位慢SQL;

    2、对于慢SQL,查看其执行计划,分析耗时的原因;

    3、如果缺失索引,根据业务需求,创建合适的索引;如果由于SQL语句的写法有问题,需要根据业务逻辑优化语句的写法。

    实用的SQL诊断工具

    1、SQLTXPLAIN

    是Oracle专家开发的,用于诊断SQL相关的问题的工具,简单易用却功能强大。

    对于慢SQL诊断支持很多Optimzer问题:如执行计划异常、SQL慢、结果不正(Wrong Result)等。

    慢SQL优化

    由 SQL 编写导致的慢 SQL 的优化建议:

    1、字段类型转换导致不用索引,如字符串类型的不用引号,数字类型的用引号等,这有可能会用不到索引导致全表扫描;

    2、mysql 不支持函数转换,所以字段前面不能加函数,否则这将用不到索引;

    3、不要在字段前面加减运算;

    4、字符串比较长的可以考虑索引一部份减少索引文件大小,提高写入效率;

    5、like % 在前面用不到索引;

    6、根据联合索引的第二个及以后的字段单独查询用不到索引;

    7、不要使用 select *;

    慢 SQL 诊断优化套路包,套路用的对,速度升百倍

    8、排序请尽量使用升序 ;

    9、or 的查询尽量用 union 代替 (Innodb);

    10、复合索引高选择性的字段排在前面;

    11、order by / group by 字段包括在索引当中减少排序,效率会更高。

    12、删除表所有记录请用 truncate,不要用 delete

    13、不让 mysql 干多余的事情,如:计算

    14、在 Innodb上用 select count(*),因为 Innodb 会存储统计信息;

    15、慎用 Oder by rand()。

    开源 SQL 优化平台

    对于 SQL 语句的优化,现在有一些开源的SQL优化平台,这些融入了大量DBA工程师的经验,我们可以借助这些平台对 SQL 进行优化。

    1、SOAR

    地址:https://github.com/XiaoMi/soar/

    是一款 SQL 智能优化与改写工具,由小米运维 DBA 团队出品,SOAR 主要由语法解析器、集成环境、优化建议、重写逻辑、工具集五大模块组成,相比业内其他优秀产品有自己的优势,不仅能帮助你 rewrite SQL并且能给出一些优化的建议。

    慢 SQL 诊断优化套路包,套路用的对,速度升百倍

    2、SQLAdvisor

    地址:https://github.com/Meituan-Dianping/SQLAdvisor

    是由美团点评公司技术工程部DBA团队(北京)开发维护的一个分析SQL给出索引优化建议的工具。它基于MySQL的原生态词法解析,结合分析SQL中的其中条件,聚合条件,多表加入关系给出索引优化建议。

  • 相关阅读:
    nginx搭建文件服务器配置文件
    VS code
    UNIX 网络编程学习
    局域网内的一些计算机可以ping通 有些ping不同
    Cfree clion windows c语言 socket 网络编程
    查找文件
    select * from 后有多个表的使用方法
    linux安装git方法
    Xshell中文乱码怎么处理?
    linux 逻辑卷管理 /dev/mapper/VolGroup-lv_root 100%调整分区大小
  • 原文地址:https://www.cnblogs.com/wyf0518/p/11451658.html
Copyright © 2020-2023  润新知