MySQL 中的 LIMIT子句主要用于限制 SELECT语句返回的数据行数,在分页查询或快速查看部分数据时非常实用。下面我来为你详细解释它的用法、常见场景以及需要注意的性能问题。
LIMIT子句的基本语法如下,它接受一个或两个非负整数参数:
SELECT column1, column2, ...
FROM table_name
LIMIT [offset, ] row_count;或者使用 OFFSET关键字实现相同功能,这种写法在与 PostgreSQL 等数据库兼容时更为通用:
SELECT column1, column2, ...
FROM table_name
LIMIT row_count OFFSET offset;offset:偏移量,表示从第几行开始返回(起始行的索引为 0,而不是 1)。即要跳过的记录数量。row_count:要返回的最大记录行数。应用场景 | 示例 SQL | 说明 |
|---|---|---|
返回前 N 条记录 | SELECT * FROM products LIMIT 10; | 获取 products表中的前 10 条记录。 |
分页查询 | SELECT * FROM users LIMIT 20, 10; | 从第 21 条记录开始(跳过前20条),返回 10 条数据。常用于数据分页展示的第二页。 |
结合 ORDER BY 使用 | SELECT * FROM products ORDER BY price DESC LIMIT 5; | 先按价格降序排序,然后返回价格最高的前 5 个产品。 |
结合 WHERE 使用 | SELECT * FROM orders WHERE status = 'completed' LIMIT 50; | 先筛选出状态为 'completed' 的订单,然后返回前 50 条。 |
使用 OFFSET 语法 | SELECT * FROM articles LIMIT 10 OFFSET 5; | 从第 6 条记录开始(偏移 5 条),返回 10 条数据。结果同 LIMIT 5, 10;。 |
LIMIT子句的参数必须是非负的整数常量。早期有些文档提及可以使用 LIMIT 95,-1;来获取从偏移量到末尾的所有记录,但经过验证这是无效语法,参数中不能有负数。LIMIT与 ORDER BY一起使用时,MySQL 会先对结果集进行排序,然后再应用 LIMIT限制。如果排序的列存在重复值,那么返回的最终结果集在边界处可能是不确定的。LIMIT时最需要关注的问题。当你使用 LIMIT 100000, 20;这样的查询时,MySQL 需要先读取 100020 条记录,然后丢弃前 100000 条,只返回最后的 20 条。偏移量 (offset) 越大,这个过程的开销就越大,性能会显著下降。LIMIT常与 ORDER BY某个字段一起使用,为该字段建立索引可以大幅提高排序速度,从而提升查询性能。没有搜到相关的沙龙