博客
关于我
MySQL原理简介—11.优化案例介绍
阅读量:789 次
发布时间:2023-02-12

本文共 838 字,大约阅读时间需要 2 分钟。

数据库优化指南:针对常见SQL性能问题的实战解决方案

1. 禁用或改写SQL,避免MySQL自动半连接优化

业务背景

某互联网公司面临用户筛选性能问题。公司拥有百万级日活用户和千万级注册用户,用户数据集中在单张users表中。推送系统需要筛选符合特定条件的用户,导致高负载查询。

问题分析

使用子查询和IN操作时,MySQL自动触发半连接优化,导致全表扫描,性能严重下降。执行计划显示,子查询生成临时表,主查询全表扫描,导致几十秒耗时。

优化方法

  • 禁用半连接优化:设置SET optimizer_switch='semijoin=off',关闭半连接优化。
  • 改写SQL:通过添加不影响语义的条件,例如OR id IN (SELECT ...),避免半连接优化。
  • 结果

    优化后,查询性能提升数十倍,执行时间缩短至百毫秒以内。


    2. 指定索引,避免按聚簇索引全表扫描大表

    业务背景

    商品系统查询慢,原因在于选择了不合适的索引,导致全表扫描。

    问题分析

    查询使用主键聚簇索引,无法快速筛选,导致全表扫描。优化后发现,某些查询因条件不满,导致全表扫描耗时过长。

    优化方法

    force index语法强制使用指定索引,避免全表扫描,提升性能。

    结果

    查询执行时间从几十秒降至百毫秒,解决了数据库连接资源耗尽的问题。


    3. 按聚簇索引扫描小表,减少回表次数

    业务背景

    分页查询热门商品评论,存在大量回表操作,影响性能。

    优化方法

    使用子查询生成临时表,减少回表次数,提升查询效率。

    结果

    优化后,执行时间降至几百毫秒,满足分页需求。


    4. 避免长事务长时间执行

    业务背景

    长时间运行的事务导致数据库负载高,影响查询性能。

    优化方法

    终止长事务,避免影响其他查询。定期清理数据,减少长时间持有锁的风险。

    结果

    查询性能恢复正常,数据库负载降低。


    总结

    针对不同场景,需根据具体问题选择优化策略。通过禁用半连接优化、指定索引、优化分页查询及终止长事务,可以有效提升数据库性能,减少慢查询问题。

    转载地址:http://ombfk.baihongyu.com/

    你可能感兴趣的文章
    mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
    查看>>
    mysql中出现Unit mysql.service could not be found 的解决方法
    查看>>
    mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
    查看>>
    Mysql中各类锁的机制图文详细解析(全)
    查看>>
    MySQL中地理位置数据扩展geometry的使用心得
    查看>>
    Mysql中存储引擎简介、修改、查询、选择
    查看>>
    Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
    查看>>
    mysql中实现rownum,对结果进行排序
    查看>>
    mysql中对于数据库的基本操作
    查看>>
    Mysql中常用函数的使用示例
    查看>>
    MySql中怎样使用case-when实现判断查询结果返回
    查看>>
    Mysql中怎样使用update更新某列的数据减去指定值
    查看>>
    Mysql中怎样设置指定ip远程访问连接
    查看>>
    mysql中数据表的基本操作很难嘛,由这个实验来带你从头走一遍
    查看>>
    Mysql中文乱码问题完美解决方案
    查看>>
    mysql中的 +号 和 CONCAT(str1,str2,...)
    查看>>
    Mysql中的 IFNULL 函数的详解
    查看>>
    mysql中的collate关键字是什么意思?
    查看>>
    MySql中的concat()相关函数
    查看>>
    mysql中的concat函数,concat_ws函数,concat_group函数之间的区别
    查看>>