mysql大数据量 分页查询优化

最近我老表问我一个面试问题,如果数据量很大,分页查询怎么优化。

个人觉得无非就是sql优化,

那无非就是走索引 ,

避免回表查询(覆盖索引 ,也就是不要用select * ,走主键索引 ,叶子节点有保存了数据),

减少回表查询次数(定位到非聚簇索引树的叶子节点少,小表驱动大表等)

我下面自己测了一个500万数据,取偏移量400万20条数据的例子 ,话不多说上例子

表tb_user

bash 复制代码
CREATE TABLE `tb_user` (
  `user_id` bigint NOT NULL COMMENT '用户id',
  `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户'

500万数据

正常的sql

bash 复制代码
SELECT * FROM `tb_user` LIMIT 4000000, 20;    
EXPLAIN SELECT * FROM `tb_user` LIMIT 4000000, 20; //执行计划 看了全表扫描


优化后的sql,由于我的是long类型的主键雪花id所以我需要找到主键 。

像那些直接是递增的主键id 可以直接where user_id > 偏移量 ,但是是要表数据没被删过,不然你的id跟你的第几条数据对不上了

bash 复制代码
SELECT * FROM `tb_user` WHERE user_id > (SELECT user_id FROM `tb_user` LIMIT 3999999,1 ) LIMIT 20;
EXPLAIN SELECT * FROM `tb_user` WHERE user_id > (SELECT user_id FROM `tb_user` LIMIT 3999999,1 ) LIMIT 20;

可以看到快了0.3秒。

总之,就是sql优化的问题。

想看更多精彩内容,可以关注我的博客园
我的博客园

相关推荐
陈年老古董12 分钟前
Spark 3.1.3 集群搭建 + Spark-SQL 整合 Hive 记录
hive·sql·spark
2603_9696948519 分钟前
【MySQL学习笔记】DQL(基础查询/条件/聚合/分组/排序/分页)与 DCL(用户权限)全解析
数据库·笔记·学习·mysql·学习方法
Paper数据分析-经管学术26 分钟前
1985-2025年地级市绿色发明专利被引量
数据库
念何架构之路35 分钟前
Go 标准库 database/sql 详解
数据库·sql·golang
云边有个稻草人38 分钟前
MongoDB迁移不止是数据搬家:用KingbaseES重构文档数据开发
数据库·mongodb·重构·国产数据库·信创数据库·数据库国产化·mongodb迁移
MaAidan43 分钟前
让 Agent 接上 YApi、Yuque、数据库、Redis 和日志:我的 MCP 资源绑定设计
数据库·redis·缓存
pikapika~~~1 小时前
Mysql+Redis八股
数据库·redis·mysql
ShineWinsu1 小时前
对于Qt:QLCDNumber常见属性以及QTimer的解析
服务器·数据库·c++·qt·gui·qtimer·qlcdnumber
captain3769 小时前
MyBatis(入门5)其他查询操作
java·数据库·spring boot·mybatis
小此方10 小时前
Re:Mysql数据库基础篇(八):详细讲解复合查询、多表查询、自连接、多行、多列子查询与合并查询
数据库·mysql