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

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

相关推荐
m0_716430076 分钟前
如何用 classList.toggle 实现侧边栏菜单的点击展开与收起
jvm·数据库·python
爪洼传承人8 分钟前
AI工具MCP的配置,慢sql优化
android·数据库·sql
Aloudata16 分钟前
PL/SQL 存储过程血缘解析指南:攻克数据治理的「最后堡垒」
数据库·sql·数据治理·数据管理·元数据·数据血缘
Francek Chen23 分钟前
【大数据存储与管理】NoSQL数据库:03 NoSQL与关系数据库的比较
大数据·数据库·分布式·nosql
liliangcsdn26 分钟前
多轮对话长上下文-向量检索和混合召回示例
开发语言·数据库·人工智能·python
weixin_5806140033 分钟前
PHP源码运行受主板供电影响吗_供电相数重要性说明【技巧】
jvm·数据库·python
2301_8152795236 分钟前
c++怎么获取文件的Inode节点信息_stat结构体深度解析【详解】
jvm·数据库·python
weixin_5806140041 分钟前
如何在 Go 中使用 gocql 执行本地 CQL 脚本文件
jvm·数据库·python
weixin_580614001 小时前
mysql权限表查询性能如何优化_MySQL系统权限缓存原理
jvm·数据库·python
解救女汉子1 小时前
mysql如何实现数据库降序输出_使用order by字段desc语句
jvm·数据库·python