IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Mysql 分页优化 -> 正文阅读

[大数据]Mysql 分页优化

limit 1000,10和limit 10速度一样快嘛?

以下是在本地执行结果

select * from event_log limit 10
10 rows retrieved starting from 1 in 133 ms (execution: 83 ms, fetching: 50 ms)
select * from event_log limit 1000, 10
10 rows retrieved starting from 1 in 113 ms (execution: 86 ms, fetching: 27 ms)
select * from event_log limit 10000, 10
10 rows retrieved starting from 1 in 141 ms (execution: 119 ms, fetching: 22 ms)

很显然三者的速度并不一致,但是limit 10和limit 1000,10相差无几,limit 10000, 10则相对来说慢上一些

但另一方面也说明,在数量级没有达到一定程度时,没有必要优化

对普通字段加索引

加索引无论在数据量大还是数据量小的时候都很适用。

SELECT * FROM t ORDER BY name LIMIT 100, 10;
-- 对于非索引name字段来说,如果要提升分页性能,那么将name、主键设置为联合索引,会减少回表时间

子查询获取主键

在偏移量较大时,Mysql会扫描偏移量之前的所有行,那这样的随机IO很多,因此分页查询越往后越慢

于是我们可以通过子查询先查到id,然后从id开始获取数据

SELECT * FROM (SELECT id FROM t WHERE name = "x" ORDER BY rid LIMIT 10000, 10) temp LEFT JOIN t ON temp.id = t.id

rethink 为什么需要分页

如果我们只是想取出所有数据,但是数据量太大没办法一次取到所有数据。那么也许可以根据id排序,然后将当前批次的最大id作为下一次筛选的条件

// 比如说我们可以在程序遍历中记住前次最大的id
sid:=0
for {
  data:= select * from t where id > sid order by id limit 10
  if len(data) == 0{
    break
  }
  
  sid = getMaxId(data) 
}

// 当然甚至可以将查出来的id持久化,加入到数据库中

如果是给用户做分页展示的话,那么可以更进一步思考我们要提供给用户什么样的分页。

如果更想给用户无阻断的游览体验的话,就像抖音那样,那样分页的规律便是固定从前到后;

如果更想让用户跳转,但又限制用户只能随意跳前几页,比如像谷歌那样信息检索,那么也许一次查询多页是更好的;

最后我们应该思考,什么情况下用户需要无限制的随意跳转呢?页码提供的信息是极为有限的,最多只知道我们想要看中间或者想要看最后的这种大致位置的,那么这个时候也许可以提供跳转最后的按钮给用户,至于中间的,搜索可能会是更优选择。

Ref

  1. https://blog.csdn.net/zgdwxp/article/details/102231838
  2. https://mp.weixin.qq.com/s/F_c36mAkWxGyQrhkviC46Q
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-13 11:48:46  更:2022-05-13 11:51:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 5:27:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码