网站首页 > 开源技术 正文
一、分页查询优化案例
问题现象:当使用LIMIT 1000000,10查询大量数据时,即使有索引也会非常慢
优化方案:
使用上一页的最大值作为查询条件:WHERE create_time > '2025-03-16 14:00:00' ORDER BY create_time LIMIT 10
为分页查询创建包含type、name和create_time字段的复合索引
二、隐式类型转换案例
问题现象:字段定义为varchar(20),但查询时使用数字比较,导致索引失效
示例SQL:
sql
Copy Code
SELECT * FROM my_balance WHERE bpn = 14000000123 AND isverified IS NULL
优化方案:
确保查询变量与字段定义类型一致
修改查询为字符串比较:WHERE bpn = '14000000123'
三、GROUP BY性能问题案例
问题现象:GROUP BY查询耗时30多秒,即使添加索引效果不明显
优化方案:
尝试用DISTINCT替代GROUP BY
检查MySQL参数配置,某些客户端工具(如SQLyog)可能显示不准确的执行时间
添加ORDER BY NULL避免无用排序
四、夜间清算SQL优化案例
问题现象:批量清算时GROUP BY查询耗时10秒以上,导致清算延迟
示例SQL:
sql
Copy Code
SELECT fund_id,SUM(trade_amount) FROM trades
WHERE trade_date='2025-03-28' GROUP BY fund_id
优化方案:
创建联合索引:CREATE INDEX idx_trade_date_fund ON trades(trade_date,fund_id)
使用预计算表存储每日汇总结果
五、多表关联查询优化案例
问题现象:四表关联查询执行缓慢,实际执行时间达320毫秒
优化方案:
检查关联字段是否有合适索引
分析执行计划中的"Join Filter"和"Rows Removed by Join Filter"
考虑简化查询或拆分复杂SQL为多个简单查询
六、索引失效典型案例
问题场景:
在索引列上使用函数或运算
使用OR连接非索引列条件
违反最左前缀原则
优化建议:
确保WHERE条件遵循索引的最左前缀规则
避免在索引列上使用!=、<>等操作符
为常用查询条件创建合适的联合索引
七、全表扫描优化案例
问题现象:接口超时,发现SQL在UAT环境(数据量大)出现全表扫描
优化步骤:
通过执行计划确认全表扫描
检查表设计和数据量级
为查询条件添加合适索引
考虑对大表进行分区
关键优化原则总结
索引设计原则:
区分度高的列放在联合索引前面
覆盖常用查询条件和排序字段
SQL编写规范:
避免SELECT *,只查询必要字段
用JOIN替代低效子查询
注意隐式类型转换问题
监控与分析:
开启慢查询日志(long_query_time=1)
定期使用pt-query-digest分析慢SQL
通过EXPLAIN分析执行计划(type指标重点关注)
猜你喜欢
- 2025-05-11 Java 工程师相见恨晚的神兵利器和使用技巧
- 2025-05-11 MYSQL有哪些数据类型(mysql哪些数据类型适用于存储用户评论)
- 2024-08-27 JavaEE技术点:MySQL编码问题(mysql用什么编码比较好)
- 2024-08-27 上手SQL语句调优必须了解的内容——Explain
- 2024-08-27 这些mysql图形化管理工具你都在用吗?
- 2024-08-27 MySQL的使用情况详解(mysql使用规范)
- 2024-08-27 SQLyog 连接 MySQL8.0提示2508错误码
- 2024-08-27 一次神奇的sql查询经历(sql查询操作步骤)
- 2024-08-27 SQL分类之DDL:操作数据库表(数据库ddl操作有哪些)
- 2024-08-27 屌炸了!太神奇的 SQL 查询经历,group by 慢查询优化
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)