SQL中limit的用法

语法

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 表示从结果集的第一行开始返回结果。

需要注意:

  1. 如果 offset 超过了表中的总记录数,就会返回空结果
  2. offset 与 count 一起使用可以实现更灵活的分页查询。但如果 offset 过大,查询效率可能会受影响

如:SELECT * FROM table LIMIT 1000, 50;,这个语句会跳过前 1000 条数据,然后取 50 条数据,即第 1001 到 1050 条。

优化偏移量大的问题

offset 过大,查询效率可能会受影响。这是因为 MySQL 在处理 LIMIT 子句时,需要扫描整个结果集并跳过指定数量的行,然后才能返回所需的行。

优化方案:

  1. id 是递增的情况:

    • SELECT * FROM table WHERE id > 1000000 LIMIT 10;,这里的 LIMIT 是限制了条数,没有采用偏移量
    • SELECT * FROM table WHERE id >= (SELECT id FROM table LIMIT 1000000, 1) LIMIT 10;
  2. id 非递增:

    • SELECT * FROM table WHERE id IN (SELECT id FROM table LIMIT 1000000, 10);,某些 MYSQL 版本不支持在 in 子句中使用 limit
    • SELECT a.* FROM table a, (SELECT id FROM table LIMIT 1000000, 10) b WHERE a.id = b.id;
  • 124
    点赞
  • 277
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值