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

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

相关推荐
火山上的企鹅2 小时前
Codex实战:APP远程升级服务搭建(三)后台管理页面(APK 上传、版本管理、多应用页签)
服务器·网络·数据库·oracle·qgc
阿狸猿2 小时前
论 NoSQL 数据库技术及其应用
数据库·nosql
FBI HackerHarry浩2 小时前
DataGrip2023.2.3默认保存的数据库和.sql文件在哪里?怎么修改默认路径?
数据库
袁小皮皮不皮3 小时前
3.HCIP OSPF补充知识(优化版)
服务器·网络·数据库·网络协议·智能路由器
运筹vivo@3 小时前
Python ContextVar 底层机制与内存模型拆解
前端·数据库·python
志栋智能3 小时前
超自动化巡检:知识沉淀与团队协作的新载体
大数据·运维·网络·数据库·人工智能·自动化
syt_biancheng4 小时前
Redis初识
数据库·redis·缓存
cmes_love4 小时前
股票逐笔level2历史行情下载十档订单薄五档tick分钟下载分享
数据库·区块链
仙俊红4 小时前
SQL 调优需要掌握的知识
数据库·sql
fofantasy5 小时前
NSK LH12AN 微型导轨技术手册
运维·网络·数据库·经验分享·规格说明书