首页 > 其他分享 >limit与分页键

limit与分页键

时间:2023-03-29 22:27:36浏览次数:32  
标签:分页 偏移量 查询 limit publish time


博客:cbb777.fun

全平台账号:安妮的心动录

github: https://github.com/anneheartrecord

下文中我说的可能对,也可能不对,鉴于笔者水平有限,请君自辨。有问题欢迎大家找我讨论~

## limit与分页

在SQL中,limit用于限制返回的结果行数。LIMIT语句可以用于SELECT查询,用于**限制查询结果集的行数**,从而在处理大型数据集时,减少数据库的负载,提高查询的性能

基本语法如下

```plain
SELECT * FROM table_name LIMIT [offset],row_count;
//table_name是表名
//offset是可选的偏移量,用于指定要从结构集的哪个位置开始返回行
如果省略该参数,默认从第一行开始返回
//row_count一共返回的行数,也就是查询得到的数量

比如
select * from students limit 5,10;

或者
select * from students limit 10 offset 5;
```

limit在实际应用中常用于分页查询

举个例子

现在我有一个article表,想要做到文章分页展示的功能,每一页展示10篇文章

```plain
//表结构如下

CREATE TABLE article (
id int(11) not null auto_increment,
title varchar(255) not null,
content text,
publish_time datetime not null,
primary key (id)
);

/这个时候调用方传来一个n,通常是Logic层往dao层传 伪代码如下
select * from article order by
publish_time desc limit ?,10 values (n*10);

//这条SQL就能做到文章分页的功能,按照时间来分页
//具体实践中可能没有这么简单,通常是热度、时间等等
```

## 深分页

查询结果集中的某个位置之后的记录,即查询结果集的偏移量很大的情况。这样需要扫描的数据量就很大,可能导致查询的性能变得很低下

如何避免深分页的问题

- 使用更小的偏移量:比如将偏移量从10000降低到100
- 使用分页键
- 缓存结果集,在内存层面进行返回
- 分库分表,减少每个表的数据量大小

## 分页键

分页键(pagination key)是一种用于分页查询的技术,它可以帮助我们在大数据集合中快速定位到需要查询的数据段。分页键通常是一个**唯一的标识符**,可以表示查询结果集中的某一行。在使用分页键的时候,通过查询分页键来定位结果集的起始位置,从而避免了偏移量很大的情况,也就是避免了SQL深分页的情况。

举个例子,假设我们需要查询一个包含一百万行数据的用户表,并且我们需要查询第500001到第500100行的数据。如果用偏移量的方式进行查询,需要查询前5000000行数据才能获得我们需要的结果,这将导致查询性能非常低下。而使用分页键的方式,可以在查询时直接指定分页键的值,从而定位到结果集的起始位置,避免了大量的数据扫描。

使用分页键的时候,我们需要选择一个合适的字段作为分页键,并确保该字段具有唯一性。通常情况下,自增长主键或者时间戳字段都是比较好的选择,分页键适用于有序数据集的分页查询

下面有一个具体的栗子

假设我们有一个包含大量文章的表,每篇文章都有一个唯一编号id和发布时间publish_time两个字段。我们需要查询发布时间在2022年1月1日到2022年3月31日之间的文章,并按照发布时间进行排序,每页显示十篇文章,显示第六页的数据

```plain
1.选择分页键:根据查询条件,我们选择publish_time作为分页键

2.查询第五页的最后一篇文章的发布时间
我们得确定第五页最后一篇文章的发布时间
select publish from articles
where publish_time>='2022-01-01 00:00:00'
and publish_time<='2022-03-31 23:59:59'
order by pulish_time asc
limit 1 offset 50;

3.使用分页键查询数据
select * FROM articels
where publish_time>='分页键的值'
and publish_time<='2022-03-31 23:59:59'
order by publish_time asc
limit 10;
```

标签:分页,偏移量,查询,limit,publish,time
From: https://www.cnblogs.com/bokeofcxs/p/17270637.html

相关文章

  • 1.封装PageHelper实现分页
    前言这几天想着动手将一些技术融合到项目中,昨天思考了会儿,想起了我与亲戚的对话:我说:“我想将若依项目完整的实现一遍”,亲戚给我反馈到“你没必要完整复现若依项目,而且......
  • github的pageHelper分页和手动分页
    java中各种常用分页插件:MyBatis分页插件:MyBatis提供了一种分页插件,可以通过配置实现分页查询。使用MyBatis分页插件需要在配置文件中添加插件配置。PageHelper:PageHe......
  • 亿万级分库分表后如何进行跨表分页查询
    前言在常规的应用系统开发中,很少会涉及到需要对数据进行分库或者分表的操作,多数情况下,我们习惯使用ORM带来的便利,且使用连接查询是一种高效率的开发方式,就算涉及到分表的......
  • spring data jpa 分页
    publicPage<Task>getUserTask(LonguserId,Map<String,Object>searchParams,intpageNumber,intpageSize,StringsortType){PageRequestpageRequest=buil......
  • 分页查询
         ......
  • Winform/Csharp中使用定时器+分页算法实现DataGridView自动分页显示(模拟大屏切换效果
    场景Winform中DataGridView设置前景色、单元格背景色、标题栏样式、禁止改变高宽、不显示空白行、清除选中样式、填充数据源、设置标题、设置单列宽度:https://blog.csdn.......
  • 18.分页介绍
    1.页表大小随虚拟地址空间增加,随页面大小减小页面太大了,不就变成了分区吗,就有外部碎片了2.百分比增加,valid的变多3.我也没看出有什么不妥可能前两个组合对于虚拟......
  • 一统天下 flutter - widget 容器类(只能有一个子): LimitedBox - 限制最大尺寸
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget容器类(只能有一个子):LimitedBox-限制最大尺寸示例如下:lib\w......
  • 在Winform分页控件中集成导出PDF文档的功能
    当前的Winform分页控件中,当前导出的数据一般使用Excel来处理,Excel的文档可以用于后期的数据展示或者批量导入做准备,因此是比较好的输入输出格式。但是有框架的使用客户希望......
  • MySQL order by limit 分页数据重复或丢失问题说明
    mysql中当orderby与limit同时使用,数据可能出现重复或丢失问题使用了下面的方法发现也没什么问题Db::name('users')->where(['is_disabled'=>0])->field('id,nickn......