当前位置: 首页 > 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.lryc.cn/news/448665.html

相关文章:

  • 学校周赛(1)
  • 人生苦短,我用Python✌
  • uniapp js判断key是否在json中?
  • Codeforces Round 975 (Div. 2) C. Cards Partition
  • Qt 首次配置 Qt Creator 14.01 for Python
  • 【python】代码发布前检查- vulture:查找死代码
  • Yolov10环境配置
  • iOS 提取图片的主题色,并支持灵活提取
  • 语雀笔记使用记录
  • 安全教育培训小程序系统开发制作方案
  • 【面试题】软件测试实习(含答案)
  • 后端回写前端日期格式化
  • 微信小程序开发系列之-在微信小程序中使用云开发
  • 《论文阅读》 用于产生移情反应的迭代联想记忆模型 ACL2024
  • 零基础教你如何开发webman应用插件
  • AVL树(平衡二叉树)的介绍以及相关构建
  • SAP员工士气因重组受到打击
  • Unity3D 中构建行为树插件详解
  • 数学符号练习-函数连续性与导数
  • 笔记本维修与拆解(一)
  • 【JavaSE系列】IO流
  • 深入探讨在线教育系统源码:搭建知识付费平台实战方案详解
  • 前端全屏模式切换
  • 构建高可用和高防御力的云服务架构第二部分:SLB负载均衡(2/5)
  • 计算机毕业设计Python+Spark知识图谱微博舆情预测 微博推荐系统 微博可视化 微博数据分析 微博大数据 微博爬虫 Hadoop 大数据毕业设计
  • excel-VBA知识点记录
  • RabbitMQ——消息的可靠性处理
  • babylon.js-1:入门篇
  • VS Code调整字体大小
  • Python基础语句教学