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优化的问题。

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

相关推荐
Mortalbreeze3 分钟前
MySQL 基础篇(五):数据操作基础 —— CRUD
linux·服务器·数据库·mysql
Shadow(⊙o⊙)4 分钟前
mysql为创建普通用户并创建库赋权
数据库·sql·mysql
Studying 开龙wu12 分钟前
CVAT 导出崩溃排查实录:一个空壳轨迹引发的连锁反应
数据库·sqlite
PaperData8 小时前
1985-2025年全国区县专利申请与授权面板数据
数据库
snpgroupcn8 小时前
大数据量SAP迁移方案:系统越大,越不能硬搬
数据库·sap
Flynt9 小时前
Redis Cluster主节点挂了,为什么"高可用"还全员掉线?我把三次kill的记录翻出来了
数据库·redis·分布式
笃行35010 小时前
KingbaseES 数据加密全解:从 SSL 到全密态
数据库
Ivanqhz10 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
Seraphina3610 小时前
SQLI-labs(一)黑盒全流程
sql·安全·web安全
java1234_小锋11 小时前
【技术专题】Mysql8 数据库 - Mysql8 数据类型简介
数据库·mysql