mysql中的limit关键字主要用于限制查询语句返回的记录条数,是日常开发中处理数据查询、分页场景的常用工具,合理使用可以提升查询效率,减少不必要的数据传输。

limit基础语法
limit的基本语法有两种常见形式,第一种是只指定返回记录的数量:
-- 查询user表中前5条记录 SELECT * FROM user LIMIT 5;
第二种是指定偏移量和返回数量,语法为LIMIT offset, row_count,其中offset表示跳过的记录数,row_count表示返回的记录数:
-- 跳过前2条记录,返回接下来的3条记录 SELECT * FROM user LIMIT 2, 3;
limit常见使用场景
1. 获取单条记录
如果需要获取表中符合条件的第一条记录,可以配合limit 1使用,避免查询全表:
-- 获取id最大的用户记录 SELECT * FROM user ORDER BY id DESC LIMIT 1;
2. 实现分页查询
分页是limit最常见的使用场景,假设每页展示10条数据,那么第n页的查询语句可以写成:
-- 第1页,偏移量0,返回10条 SELECT * FROM user LIMIT 0, 10; -- 第2页,偏移量10,返回10条 SELECT * FROM user LIMIT 10, 10; -- 第n页,偏移量(n-1)*10,返回10条 SELECT * FROM user LIMIT (n-1)*10, 10;
3. 随机获取记录
如果需要随机获取表中的记录,可以结合order by rand()和limit实现:
-- 随机获取3条用户记录 SELECT * FROM user ORDER BY RAND() LIMIT 3;
limit使用注意事项
- offset过大时查询效率会降低,比如
LIMIT 100000, 10需要扫描前100010条记录再返回后10条,此时可以优化为基于索引的查询:
-- 假设id是连续自增索引,优化大偏移量分页 SELECT * FROM user WHERE id > 100000 LIMIT 10;
- limit后面如果只跟一个参数,该参数表示返回的记录数,而不是偏移量,不要和两种语法形式混淆。
- 如果查询语句中包含order by子句,limit会在排序之后执行,确保返回的是排序后的指定条数记录。
- 在子查询中使用limit时,需要给子查询设置别名,否则会报语法错误:
-- 正确写法,子查询设置别名t SELECT * FROM (SELECT * FROM user LIMIT 5) AS t;
limit与offset的替代写法
mysql也支持LIMIT row_count OFFSET offset的写法,功能和LIMIT offset, row_count一致,可读性更强:
-- 等价于LIMIT 2, 3 SELECT * FROM user LIMIT 3 OFFSET 2;