当前位置: 首页 > news >正文

【MySQL】MySQL大偏移量查询优化方案

针对您的查询 SELECT a1, a2, a3 FROM a WHERE a1=1 LIMIT 604320, 30LIMIT 604320, 604350 等价于跳过 604320 行取 30 行),以下是优化建议及具体操作:


问题分析

  1. 大偏移量问题LIMIT 604320, 30 需要先扫描 604320 + 30 = 604350 行,再丢弃前 604320 行,效率极低。
  2. 索引缺失:若 a1 无索引,需全表扫描。
  3. 回表开销:若索引未覆盖 a1,a2,a3,需回表查询数据。

优化方案

1. 使用覆盖索引 + 延迟关联(推荐)

通过子查询先快速定位主键(利用索引),再关联回原表获取数据。

-- 步骤1: 确保存在索引 (a1) 或 (a1, id)
ALTER TABLE a ADD INDEX idx_a1 (a1); -- 如果a1无索引-- 步骤2: 优化查询(假设主键为id)
SELECT a.a1, a.a2, a.a3
FROM a
JOIN (SELECT idFROM aWHERE a1 = 1ORDER BY id -- 明确排序依据(假设按主键排序)LIMIT 604320, 30
) AS tmp ON a.id = tmp.id;

优化点

  • 子查询通过索引 idx_a1 直接定位主键,避免回表。
  • 主查询通过主键快速获取数据。

2. 基于游标的分页(最优但需业务改造)

记录上一页最后一条记录的ID,避免使用偏移量。

-- 第一页(假设按主键id排序)
SELECT a1, a2, a3
FROM a
WHERE a1 = 1
ORDER BY id
LIMIT 30;-- 后续分页:用上一页最后一条记录的id作为起始点
SELECT a1, a2, a3
FROM a
WHERE a1 = 1 AND id > {上一页最后一条id}
ORDER BY id
LIMIT 30;

优点:查询速度恒定,不受页码影响。


3. 使用覆盖所有字段的索引

若索引包含 (a1, a2, a3),可避免回表:

ALTER TABLE a ADD INDEX idx_cover (a1, a2, a3);SELECT a1, a2, a3
FROM a
WHERE a1 = 1
LIMIT 604320, 30;

注意:虽然减少回表,但大偏移量扫描索引行数不变。


方案对比

方案速度适用场景
延迟关联快(推荐)深度分页,无法改造业务逻辑
游标分页极快(最优)可改造业务,支持连续翻页
覆盖索引中等小偏移量分页,或索引完全覆盖字段

其他建议

  1. 强制索引(谨慎使用):
    SELECT a1, a2, a3
    FROM a FORCE INDEX (idx_a1)
    WHERE a1 = 1
    LIMIT 604320, 30;
    
  2. 业务优化
    • 限制用户访问深度页码(如只展示前100页)。
    • 使用预加载或缓存热门数据。

总结

  • 首选方案:使用 延迟关联(子查询定位主键 + 关联回表)。
  • 长期方案:改为 游标分页(基于有序值分页)。
  • 辅助措施:为 a1 及查询字段添加索引。

通过以上优化,查询耗时可从秒级降至毫秒级(尤其在游标分页下)。

http://www.dtcms.com/a/308018.html

相关文章:

  • 若依框架-前端二次开发快速入门简述
  • [硬件电路-109]:模拟电路 - 自激振荡器的原理,一种把直流能量转换成交流信号的装置!
  • Linux软件包管理器深度解析:从概念到实战
  • React开发依赖分析
  • TRAE 软件使用攻略
  • 快速搭建Node.js服务指南
  • python制作的软件工具安装包
  • c# net6.0+ 安装中文智能提示
  • 前端框架Vue3(二)——Vue3核心语法之OptionsAPI与CompositionAPI与setup
  • 超体积指标(Hypervolume Indicator,S 度量)详析
  • 【JMeter】性能测试脚本录制及完善
  • 辐射源定位方法简述
  • 【BUUCTF系列】[HCTF 2018]WarmUp1
  • 网络编程-IP
  • 计算机网络:什么是光猫
  • Hyperbrowser MCP:重新定义网页抓取与浏览器自动化的AI驱动工具
  • Solr升级9.8.0启动异常UnsupportedOperationException known Lucene classes
  • Tauri vs Electron 的全面对比
  • 生产管理升级:盘古IMS MES解锁全链路可控可溯,激活制造效率
  • LCM中间件入门(2):LCM核心实现原理解析
  • 牛客练习赛142 第四次忍界大战 并查集
  • 永磁同步电机无速度算法--直流误差抑制自适应二阶反推观测器
  • Gemini Fullstack LangGraph Quickstart(DeepSeek+Tavily版本)
  • 【React】diff 算法
  • Elasticsearch 索引及节点级别增删改查技术
  • 基于单片机胎压检测/锅炉蒸汽压力/气压检测系统
  • VBA代码解决方案第二十七讲:禁用EXCEL工作簿右上角的关闭按钮
  • 分布式ID方案(标记)
  • TDengine oss数据的导出和导入
  • 大数据岗位技能需求挖掘:Python爬虫与NLP技术结合