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

mysql超大分页问题处理~

    大家好,我是程序媛雪儿,今天咱们聊mysql超大分页问题处理。

超大分页问题是什么?

    数据量很大的时候,在查询中,越靠后,分页查询效率越低

例如

select * from tb_sku limit 0,10;
select * from tb_sku limit 9000000,10

    上面这条sql,需要查9000010条数据(9000010条数据需要被完整的扫描一遍),却只取最后10条返回,其他都会丢掉,查询代价太大!

在解决这个问题之前,我们先了解一下,什么是覆盖索引

覆盖索引

覆盖索引是指查询使用了索引,并且需要返回的列在索引中都能够找到

select * from tb_user where id = 1 ##覆盖索引

因为根据id查,所建立的聚簇索引的叶子节点存储着所有数据

select id, name from tb_user where name = 'Arm' ## 覆盖索引

因为根据name建立的二级索引,叶子节点志存着name和id,而查找的内容刚好是name和id

select id,name,gender from tb_user where name = 'Arm' ## 非覆盖索引

因为根据name建立的二级索引里没有gender,需要根据id再到聚簇索引中找gender,换句话说,需要回表查询

优化方案

我们在了解覆盖索引之后,针对

select * from tb_sku limit 9000000,10

这个sql语句,应该怎么优化呢?

思路:通过创建覆盖索引+子查询的形式进行优化

上面那个例子可以把sql改为

select *
from tb_sku t,(select id from tb_sku order by id limit 9000000,10)a
where t.id = a.id;

这种查询方式就可以避免回表查询,因为子查询中采用的是覆盖索引,已经包含了要查找的id,且id有序,因此可以快速跳到第9000000条数据并获取接下来的10个id,然后再根据id获取完整行的数据,这样节省了扫描前9000000条数据的时间,效率大大提升。

         欢迎大家关注我的微信公众号,程序媛雪儿,雪儿会定期在上面发布编程的知识碎片,也有雪儿博客地址,上面有详细系统的笔记,雪儿是全栈,但是公众号目前主要还是发后端的技术,以后可能也会涉及到一些前端的知识,我们下期见,拜拜~

http://www.lryc.cn/news/410807.html

相关文章:

  • Gitlab以及分支管理
  • 探索Axure在数据可视化原型设计中的无限可能
  • Redis 内存淘汰策略
  • 逆天!吴恩达+OpenAI合作出了大模型课程!重磅推出《LLM CookBook》中文版
  • uint16_t、uint32_t类型数据高低字节互换
  • Java实现数据库图片上传(包含从数据库拿图片传递前端渲染)-图文详解
  • 开放式耳机原理是什么?通过不入耳的方式,享受健康听音体验
  • 有趣的PHP小游戏——猜数字
  • logstash 全接触
  • Windows本地构建镜像推送远程仓库
  • 计算机毕业设计LSTM+Tensorflow股票分析预测 基金分析预测 股票爬虫 大数据毕业设计 深度学习 机器学习 数据可视化 人工智能
  • 最新版上帝粒子The God Particle(winmac),Cradle Complete Bundle 2024绝对可用
  • 数 据 库
  • 智能城市管理系统设计思路详解:集成InfluxDB、Grafana和MQTTx协议(代码示例)
  • CloseableHttpClient.close() 导致 Connection pool shut down 的问题
  • centos7 docker空间不足
  • C#基于SkiaSharp实现印章管理(5)
  • 【C#】ThreadPool的使用
  • 【Python系列】Python 中`eval()`函数的正确使用及其风险分析
  • 使用Spring Boot开发应用:基于请求参数MD5的缓存键及其他缓存方式
  • typescript中interface常见3种用法
  • windows10 安装CUDA教程
  • 计算机毕业设计选题推荐-某炼油厂盲板管理系统-Java/Python项目实战
  • PSO求解函数最小值的MATLAB例程|MATLAB源代码
  • scrapy 爬取旅游景点相关数据(一)
  • 构建铁塔基站安全防护网:视频AI智能监控技术引领智慧化转型
  • Java中的分布式缓存:Ehcache与Hazelcast
  • 前端开发工程师的薪资,主要取决于哪3个方面?
  • springboot美食网站—计算机毕业设计源码11574
  • WordPress建站:如何使用ChemiCloud搭建外贸独立站