offset :偏移,从 offset 条之后开始选择数据,如果 offset 不填,则 offset 为0。
rows :从偏移后开始,选择 rows 条数据。
特点:左开右闭,即选取 (offset,offset+rows] 的数据。
SELECT * FROM table LIMIT 5
SELECT * FROM table LIMIT 0,5
区间:(0,5]
offset=0
rows=5-0=5
SELECT * FROM table LIMIT 2,4
区间:(1,5]
offset=1
rows=5-1=4
SELECT * FROM table LIMIT n,m
区间:(n-1,m]
offset=n-1
rows=m-n+1
mysql使用select * limit offset, rows分页在深度分页的情况下。性能急剧下降。
limit用于数据的分页查询,当然也会用于数据的截取,下面是limit的用法:
1. 模仿百度、谷歌方案(前端业务控制)
类似于分段。我们给每次只能翻100页、超过一百页的需要重新加载后面的100页。这样就解决了每次加载数量数据大 速度慢的问题了
2. 记录每次取出的最大id, 然后where id >最大id
select * from table_name Where id >最大id limit 10000, 10
这种方法适用于:除了主键ID等离散型字段外,也适用连续型字段datetime等
最大id由前端分页pageNum和pageIndex计算出来。
3. IN获取id
4. join方式 + 覆盖索引(推荐)
如果对于有where 条件,又想走索引用limit的,必须设计一个索引,将where 放第一位,limit用到的主键放第2位,而且只能select 主键!
1. jdbcpagingReader使用方式
2. db索引分区器使用方式
入参1: 表名 如test_table
入参2: 排序索引字段 可以是主键,也可以是其他索引。需要保证是唯一索引即可。如:id
入参3: 主键可手动传入,也可以根据表名计算出来:现在只支持单列主键的。 如:id
入参4:具体表 要分多少块。如:4
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)