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

MYSQL(学习笔记)

<div>深分页怎么优化?</div> <div>还是以上面的SQL为空:select * from xxx order by id limit 500000, 10;</div> <div>方法一:</div> <div>从上面的分析可以看出,当offset非常大时,server层会从引擎层获取到很多无用的数据,而当select后面是*号时,就需要拷贝完整的行信息,拷贝完整数据相比只拷贝行数据里的其中一两个列字段更耗费时间。</div> <div>因为前面的offset条数据最后都是不要的,没有必要拷贝完整字段,所以可以将sql语句修改成:</div> <div>select * from xxx where id >=(select id from xxx order by id limit 500000, 1) order by id limit 10;</div> <div>先执行子查询 select id from xxx by id limit 500000, 1, 这个操作,其实也是将在innodb中的主键索引中获取到500000+1条数据,然后server层会抛弃前500000条,只保留最后一条数据的id。</div> <div>但不同的地方在于,在返回server层的过程中,只会拷贝数据行内的id这一列,而不会拷贝数据行的所有列,当数据量较大时,这部分的耗时还是比较明显的。</div> <div>在拿到了上面的id之后,假设这个id正好等于500000,那sql就变成了</div> <div>select * from xxx where id >=500000 order by id limit 10;</div> <div>这样innodb再走一次主键索引,通过B+树快速定位到id=500000的行数据,时间复杂度是lg(n),然后向后取10条数据。</div> <div>方法二:</div> <div>将所有的数据根据id主键进行排序,然后分批次取,将当前批次的最大id作为下次筛选的条件进行查询。</div> <div>select * from xxx where id > start_id order by id limit 10;</div> <div>通过主键索引,每次定位到start_id的位置,然后往后遍历10个数据,这样不管数据多大,查询性能都较为稳定。</div>


http://www.mrgr.cn/news/38640.html

相关文章:

  • 利用多模态输入的自我中心运动跟踪与理解框架:EgoLM
  • 算法分析,主定理
  • py-mmcif提取结构解析的方法、提交日期以及pdb ID等
  • Note2024092801_python 日历信息获取
  • 2025年营收1亿美元咨询代理机构的游戏策略:基于AIGC的无限可扩展业务
  • 网络编程操作—函数
  • ★ C++进阶篇 ★ map和set
  • KaiOS statusbar 更新代码逻辑
  • 828华为云征文|部署个人知识管理系统 SiyuanNote
  • gtk4学习
  • 程序员如何保持与提升核心竞争力在技术变革中立于不败之地
  • 每天五分钟深度学习PyTorch:如何使用GPU来跑深度学习算法模型?
  • 【C语言】字符函数和字符串函数(1)
  • DeepSpeed笔记--利用Accelerate实现DeepSpeed加速
  • 零基础教你如何开发webman应用插件
  • 【数据挖掘】2023年 Quiz 1-3 整理 带答案
  • (十七)、Mac 安装k8s
  • Redis缓存双写一致性笔记(上)
  • 视频格式转换:avi格式转mp4格式
  • 盘点4款专业高效的数据恢复工具。