SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。
对于limit m,n,前面m条记录仍然会查出,mysql返回结果时会舍弃前面的。小数据这种用法没有问题,m过大,此时效率很低,mysql给出了如下优化:
SELECT * FROM table WHERE id >=
(SELECT id FROM table WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10
或者JOIN写法
SELECT * FROM table
JOIN (SELECT id FROM table ORDER BY id desc LIMIT 10000,10) USING(id);
SELECT * FROM table as t1
JOIN (SELECT id FROM table ORDER BY id desc LIMIT 10000,1) as t2 on t1.id=t2.id LIMIT 10;