前言
首先明确 limit 和 offset 的使用方式:
limit y 表示: 读取 y 条记录
limit x, y 表示: 跳过 x 条记录,读取 y 条记录
limit y offset x 表示: 跳过 x 条记录,读取 y 条记录
准备
SELECT COUNT(*) as coun FROM `images`
-- 3677605
主键子查询
-- 耗时 2.0708秒
SELECT * FROM `images` limit 1 offset 3000000
--耗时 0.4319秒
SELECT `id` FROM `images` limit 1 offset 3000000
--只查主键的速度明显快了 使用子查询优化
--耗时 0.3901秒
SELECT
a.*
FROM
`images` a,
(
SELECT
id
FROM
`images`
LIMIT 1 OFFSET 3000000
) b
WHERE
a.id = b.id
ID游标
--耗时 0.0115秒
SELECT
a.*
FROM
`images` a,
(
SELECT
id
FROM
`images`
WHERE
id > 10000
ORDER BY
id
DESC
LIMIT 10
) b
WHERE
a.id = b.id