千万条记录如何快速分页?

2021-04-16 MySQL

前提条件,先准备一张千万条数据的表

# 1.通过主键索引加速分页查询

观察下列sql语句执行时间发现,通过主键查询速度呈几百倍递增,当然前提是我们的主键是自增的。

SELECT id,val FROM t_test LIMIT 9000000,10; -- 3.86s
SELECT id,val FROM t_test WHERE id>=9000000 LIMIT 10; -- 0.01s
SELECT id,val FROM t_test WHERE id>=9000000 AND id<=9000010; -- 0s

# 2.如果主键是不连续的呢?我们先对id进行分页查询,因为id是有索引的,因此查询id分页是非常快速的(提升不算特别明显)。

SELECT t.id,t.val
from t_test t join
(SELECT id FROM t_test LIMIT 9000000,10) tmp
ON t.id=tmp.id

# 3. 业务上限定不可以查询早期数据,避免查询很靠后的数据,避免数据库查询压力

例如微信支付不允许对一年前的订单进行退款

上次更新: 2 年前