语法
limit子句用于限制查询结果返回的数量,常用于分页查询
格式:
SELECT * FROM tableName LIMIT [offset,] rows | rows OFFSET offset # tableName:表名 # offset:可选项,偏移量,指定了结果集的起始位置(从0开始),为0时可省略 # rows:行数,指定了返回结果集的行数
limit rows
等同于 limit 0,rows
等同于 limit rows OFFSET 0
栗子:
# 查询10条数据,第1条记录到第10条记录 select * from t_user limit 10; select * from t_user limit 0,10; # 查询8条数据,第6条记录到第13条记录 select * from t_user limit 5,8; //偏移量是从0开始的,因此将从第6行开始选择
offset
offset
是 MySQL 中用于指定结果集偏移量的关键字。在使用 LIMIT
子句时,可以通过指定偏移量来跳过一定数量的行,从而获取结果集的不同部分。偏移量从0开始计数,因此 OFFSET 0
表示从结果集的第一行开始返回结果。
需要注意:
- 如果
offset
超过了表中的总记录数,就会返回空结果 - offset 与 count 一起使用可以实现更灵活的分页查询。但如果 offset 过大,查询效率可能会受影响
如:SELECT * FROM table LIMIT 1000, 50;
,这个语句会跳过前 1000 条数据,然后取 50 条数据,即第 1001 到 1050 条。
优化偏移量大的问题
offset 过大,查询效率可能会受影响。这是因为 MySQL 在处理 LIMIT 子句时,需要扫描整个结果集并跳过指定数量的行,然后才能返回所需的行。
优化方案:
- id 是递增的情况:
SELECT * FROM table WHERE id > LIMIT 10;
,这里的 LIMIT 是限制了条数,没有采用偏移量SELECT * FROM table WHERE id >= (SELECT id FROM table LIMIT , 1) LIMIT 10;
- id 非递增:
SELECT * FROM table WHERE id IN (SELECT id FROM table LIMIT , 10);
,某些 MYSQL 版本不支持在 in 子句中使用 limitSELECT a.* FROM table a, (SELECT id FROM table LIMIT , 10) b WHERE a.id = b.id;
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/kjbd-skcl/5577.html