我们在使用MySQL的查询语句的时候,经常要返回前几条或者中间某几条数据。这个时候就需要用到LIMIT。
SELECT * FROM 表名 LIMIT m,n;
SELECT * FROM table LIMIT [offset,] rows;
(一)m代表从m+1条记录行开始检索,n代表取出n条数据(m可设为0),如:
SELECT * FROM 表名 LIMIT 6,5;
表示:从第7条记录行开始算,取出5条数据
(二)值得注意的是,n可以被设置为-1。当n为-1时,表示从m+1行开始检索,直到取出最后一条数据,如:
SELECT * FROM 表名 LIMIT 6,-1;
表示:取出第6条记录行以后的所有数据。
(三)若只给出m,则表示从第1条记录行开始算一共取出m条,如:
SELECT * FROM 表名 LIMIT 6;
表示:取出前6条记录行。
(四)根据数据量的大小选择相应的语句
1.offset比较小
SELECT *
FROM aff
LIMIT 10, 10
多次运行,时间保持在0.0004-0.0005之间
SELECT *
FROM aff
WHERE vid >= (
SELECT vid
FROM aff
ORDER BY vid
LIMIT 10, 1
) LIMIT 10
多次运行,时间保持在0.0005-0.0006之间,主要是0.0006
结论:偏移量offset较小的时候,直接使用limit较优。这个显示是子查询的原因。
2.offset大的时候
SELECT *
FROM aff
LIMIT 10000, 10
多次运行,时间保持在0.0187左右
SELECT *
FROM aff
WHERE vid >= (
SELECT vid
FROM aff
ORDER BY vid
LIMIT 10000, 1
) LIMIT 10
多次运行,时间保持在0.0061左右,只有前者的1/3。
结论:偏移量offset越大,后者越优。