• SQL性能分析与优化


    SQL优化主要是用优化查询语句

    在进行优化之前,我们首先需要知道我们当前所使用的的数据库进行的一个增删改查的频率是什么个情况,需要知道当前数据库是以查询为主还是以增删改为主,如果是以增删改占据比例很重,查询相对比较少,那摩这类的数据库优化的比重就可以放轻一点,如果是查询的比重很大(互联网公司一般都是查询占据多数),那么我们就需要去考虑如果优化查询语句以及建立良好的索引结构来帮助我们更好的提高sql效率

    sql执行频率
    MYSQL客户端连接成功后,通过show[session|global] staus命令可以提供服务器状态信息,通过如下指令,可以查看当前数据库的insert\update\delete\select的访问频次
    在这里插入图片描述

    慢查询日志

    查看当前数据库服务器是否开启了慢查询日志
    在这里插入图片描述
    配置慢查询日志

    在这里插入图片描述
    配置好之后需要重启mysql服务器 systemctl restart mysqld

    之后再次查看mysql慢日志信息

    在这里插入图片描述

    当你再次执行sql语句时,就会生成慢查询日志文件,该目录的位置在 /var/lib/mysql

    进入到该目录下: cd /var/lib/mysql,输入 ll -s查看当前目录下的所有文件
    在这里插入图片描述
    现在我执行一条sql语句,select count(*) from tb_sku; 这条sql会扫描一千万多条数据,执行时间肯定会比较长,因此一定会被记录在慢查询日志中,下面看结果

    在这里插入图片描述

    profile详情

    show profiles能够在做sql优化时帮助我们了解时间都耗费到哪里去了,通过hava_profilling参数,能够看到当前mysql是否支持profile操作:

    在这里插入图片描述
    查看当前数据库是否开启了profilling功能
    在这里插入图片描述
    开启之后,可以自己手动先写几条sql,然后去查看profilling详情
    在这里插入图片描述
    结果如下:
    在这里插入图片描述
    查看某条具体的sql执行时间消耗在哪里了
    在这里插入图片描述

    索引设计原则:

    在这里插入图片描述
    order by 优化:
    在这里插入图片描述
    在这里插入图片描述
    总结:

    • 根据排序字段建立合适的索引,多字段排序时,也遵循最左前缀法则
    • 尽量使用覆盖索引
    • 多字段排序,一个升序一个降序,此时需要注意联合索引在创建时的规则(asc/desc)
    • 如果不可避免的出现filesort,大数据量排序时,可以适当增加排序缓冲区大小sort_buffer_size(默认256k)

    group by优化

    在这里插入图片描述

    总结:

    • 在分组操作时,可以通过索引来提高效率
    • 在分组操作时,索引的使用也是满足最左前缀法则的

    limit优化
    一个常见又非常头疼的问题就是limit 2000000,10,此时需要mysql排序前200000010记录,仅仅返回2000000-20000010的记录,其他记录丢弃,查询排序的代价非常大

    在这里插入图片描述

  • 相关阅读:
    基于 JSON 的 MySQL 可扩展性设计
    mysql练习1
    20年ICPC澳门站L - Random Permutation
    oracle报错 ORA-02290: 违反检查约束条件问题
    渠道“动刀”后新款G9驾到,小鹏汽车能否过个好年?
    unittest自动化测试框架讲解以及实战
    浅谈sparse vec检索工程化实现
    面试突击39:synchronized底层是如何实现的?
    ElementUI自定义主题
    LeetCode557. 反转字符串中的单词 III
  • 原文地址:https://blog.csdn.net/qq_45243783/article/details/125581836