小视频源码,Mysql深度分页为何越往后越让人抓狂

小视频源码,Mysql深度分页为何越往后越让人抓狂

深度分页

假设电商平台的订单表存储了 2000 万条记录,表结构如下,主键是 id,(user_id + create_time )联合索引。

REATE TABLE `orders` (
  `id` int NOT NULL AUTO_INCREMENT, -- id自增
  `user_id` int DEFAULT NULL,
  `amount` decimal(10,2) DEFAULT NULL,
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP, -- 创建时间默认为当前时间
  PRIMARY KEY (`id`),
  KEY `idx_userid_create_time` (`user_id`, `create_time`) -- 创建时间设置为普通索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

我们的分页语句一般这么写。

SELECT * FROM orders
WhERE user_id = 'Chaya'
ORDER BY create_time DESC
LIMIT 0, 20;

当用户查询第 1000 页的订单(每页 20 条),常见的分页写法如下。

SELECT * FROM orders
WhERE user_id = 'Chaya'
ORDER BY create_time DESC
LIMIT 19980, 20;

执行流程解析:

使用联合索引 idx_userid_create_time读取 19980 + 20 条数据。
利用索引在内存中排序。
丢弃 19880 条数据,返回剩下的 20 条。
随着页码增加,需要处理的数据量会线性增长。当 offset 达到 10w 时,查询耗时会显著增加,达到 100w 时,甚至需要数秒。

以上就是小视频源码,Mysql深度分页为何越往后越让人抓狂, 更多内容欢迎关注之后的文章

posted @ 2025-06-21 09:25  云豹科技-苏凌霄  阅读(4)  评论(0)    收藏  举报