本文共 838 字,大约阅读时间需要 2 分钟。
某互联网公司面临用户筛选性能问题。公司拥有百万级日活用户和千万级注册用户,用户数据集中在单张users
表中。推送系统需要筛选符合特定条件的用户,导致高负载查询。
使用子查询和IN
操作时,MySQL自动触发半连接优化,导致全表扫描,性能严重下降。执行计划显示,子查询生成临时表,主查询全表扫描,导致几十秒耗时。
SET optimizer_switch='semijoin=off'
,关闭半连接优化。OR id IN (SELECT ...)
,避免半连接优化。优化后,查询性能提升数十倍,执行时间缩短至百毫秒以内。
商品系统查询慢,原因在于选择了不合适的索引,导致全表扫描。
查询使用主键聚簇索引,无法快速筛选,导致全表扫描。优化后发现,某些查询因条件不满,导致全表扫描耗时过长。
force index语法强制使用指定索引,避免全表扫描,提升性能。
查询执行时间从几十秒降至百毫秒,解决了数据库连接资源耗尽的问题。
分页查询热门商品评论,存在大量回表操作,影响性能。
使用子查询生成临时表,减少回表次数,提升查询效率。
优化后,执行时间降至几百毫秒,满足分页需求。
长时间运行的事务导致数据库负载高,影响查询性能。
终止长事务,避免影响其他查询。定期清理数据,减少长时间持有锁的风险。
查询性能恢复正常,数据库负载降低。
针对不同场景,需根据具体问题选择优化策略。通过禁用半连接优化、指定索引、优化分页查询及终止长事务,可以有效提升数据库性能,减少慢查询问题。
转载地址:http://ombfk.baihongyu.com/