`
fighter1945
  • 浏览: 230860 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

postgresql limit offset

阅读更多

 

 

LIMIT 和 OFFSET

附加上 LIMIT和OFFSET 子句之后,你就可以检索原来查询语句查询出来的结果中的一部分数据行:

 SELECT select_list
        FROM table_expression
        [LIMIT { number | ALL }] [OFFSET number]

如果给出了一个限制计数,那么返回不超过那么多的行。(但可能更少些,因为查询本身可能生成的行数就比较少。) LIMIT ALL 和省略 LIMIT 子句一样。

OFFSET 说明在开始返回行之前忽略多少行。 OFFSET 0 和省略 OFFSET 子句是一样的。如果 OFFSET 和 LIMIT 都出现了,那么在计算 LIMIT 个行之前忽略 OFFSET 行。

如果使用LIMIT,那么用ORDER BY 子句把结果行约束成一个唯一的顺序是一个好主意。否则你就会拿到一个不可预料的该查询的行的子集。--- 你要的可能是第十到二十行,但以什么顺序的十到二十?除非你声明了 ORDER BY,否则顺序是不知道的。

查询优化器在生成查询规划的时候会考虑LIMIT,因此如果你给 LIMIT和OFFSET不同的东西,那么你很可能收到不同的规划(产生不同的行顺序)。 因此,使用不同的LIMIT/OFFSET值选择不同的查询结果的子集将生成不一致的结果, 除非你用ORDER BY强制一个可预料的顺序。这可不是臭虫; 这是一个很自然的结果,因为 SQL 没有许诺把查询的结果按照任何特定的顺序发出,除非用了ORDER BY来约束顺序。

OFFSET 子句忽略的行仍然需要在服务器内部计算;因此,一个很大的 OFFSET 可能还是不够有效率的。

<!-- Saved in parser cache with key pgwiki:pcache:idhash:78-0!1!0!!zh-cn!2 and timestamp 20091111072556 -->

关于limit,offset后能不能加表达式及子查询的问题,有人说可以,有人说不可以
得出不同结论的原因,怀疑是postgresql8.4的新特性
于是稍微搜了下
看了看postgresql8.4的release log,果然如此,并且有两条说明
一个是
写道
Disallow negative LIMIT or OFFSET values, rather than treating them as zero (Simon)

 
一个是
写道
E.2.3.3.3. LIMIT/OFFSET

Allow sub-selects in LIMIT and OFFSET (Tom)

Add SQL-standard syntax for LIMIT/OFFSET capabilities (Peter)

To wit, OFFSET num {ROW|ROWS} FETCH {FIRST|NEXT} [num] {ROW|ROWS} ONLY.

 
怪不得那些个大牛闲的没事就看这种log
可怜我是前台的体力劳动者了。。。。。。哪有闲工夫来研究这个
ps 为什么我必须跑了前面跑后面呢?前台的这些玩意儿更新的够快,整天层出不穷的库啊,架啊,后面也更新的这么快,还要不要活了?

<!-- end content -->

分享到:
评论

相关推荐

    PostgreSQL LIMIT 子句

    总结来说,`LIMIT` 和 `OFFSET` 是 PostgreSQL 中用于控制 `SELECT` 查询返回结果范围的关键组成部分,它们帮助用户有效地管理和处理大数据集,提供了一种高效、灵活的方式来获取数据库中的特定部分数据。...

    PostgreSQL数据分页技术概述.pptx

    2. 使用 limit offset 效果不是很好,翻页越到后面速度越慢。 3. 使用“select * from t where id&gt;(传入上一页最后一个id) order by id limit 20”。这种方法效率比较好,适合手机屏幕向下滑动分页取数据的方式。 ...

    Sqlserver、Oracle、MySql、PostgreSql、SqlLite数据库差异

    SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset ``` - **PostgreSql**: - 使用 `LIMIT` 和 `OFFSET` 组合实现分页。 示例代码: ```sql SELECT * FROM persons LIMIT A OFFSET B ``` - **...

    PostgreSQL9.3.1 官方中文参考手册.pdf

    查询章节则介绍了如何使用PostgreSQL进行数据的查询操作,包括表表达式、选择列表、组合查询、行排序以及LIMIT和OFFSET的使用等。这部分内容非常关键,因为大多数数据库应用都需要从数据库中检索数据。 此外,手册...

    PostgreSQL从菜鸟到专家

    - **限制结果集**:使用`LIMIT`和`OFFSET`。 - **检查空值(NULL)**:处理缺失值的方法。 - **检查时间和日期**:使用相应的函数处理日期时间数据。 ##### 多个表协同工作 - **关联两个表**:使用`JOIN`操作来...

    别再用 OFFSET 和 LIMIT 分页了-综合文档

    在数据库查询中,OFFSET 和 LIMIT 是一种常见的分页方法,用于获取数据集的一部分,比如从一个大表中获取第 N 到 M 行的数据。然而,随着数据量的增长,这种分页方式可能会导致性能问题。本文将深入探讨为什么我们...

    mysql limit两个参数的四种用法

    在某些情况下,为了保持代码的可读性和与其它数据库系统的兼容性,如PostgreSQL,我们可以分开写`OFFSET`和`LIMIT`: ```sql SELECT * FROM t_user OFFSET 2 LIMIT 5; ``` 这与`LIMIT 2, 5`的效果是一样的,先跳过...

    深入分析Mysql中limit的用法

    SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数...

    mysql limit查询优化分析

    Limit语法: 复制代码 代码如下:SELECT * FROM table LIMIT [offset,] rows | rows OFFSET ...为了与 PostgreSQL 兼容,MySQL 也支持句法:LIMIT # OFFSET #。 eg: 复制代码 代码如下:mysql&gt; SELECT * FROM table L

    Mac OS上安装PostgreSQL的教程

    这种差异使得PostgreSQL的LIMIT和OFFSET语法更具可读性,尤其是在处理复杂的分页查询时。 总的来说,PostgreSQL在Mac OS上的安装过程并不复杂,主要依赖于Homebrew进行管理。在熟悉基本操作后,PostgreSQL的丰富...

    Python-queriespsycopg2库的封装用来和PostgreSQL进行交互

    2. **查询操作**:可以使用链式API进行查询,如`filter()`, `order_by()`, `limit()`, 和 `offset()`等,这与Django ORM类似。 3. **插入与更新**:通过实例化模型类并设置属性值,然后调用`save()`方法即可插入数据...

    postgresql分页数据重复问题的深入理解

    2. **堆排序**:当查询有LIMIT限制并且数据可以完全在内存中处理时,PostgreSQL可能会使用堆排序。堆排序在内存中构建一个最大(或最小)堆,并从中提取前N个元素。在上述示例中,`Limit (cost=2.71..2.73 rows=10 ...

    postgre数据库学习文档

    - `select * from &lt;table&gt; t order by t.imediaid limit 10 offset 1;` - `limit` 指定查询的记录数。 - `offset` 指定查询的起始位置。 - **执行SQL脚本**: - `Mediacenter &gt; \i f:/a.sql` - 路径必须使用反...

    PostgreSQL 语法

    - `LIMIT` 和 `OFFSET` 用于限制返回的行数,`FETCH` 则进一步控制获取的行范围。 - `FOR UPDATE/SHARE` 用于锁定选定的行,防止其他事务修改它们,这对于并发控制非常有用。 除了 `SELECT`,PostgreSQL 还提供了...

    查询前几条记录

    例如,在PostgreSQL中,可以使用`FETCH FIRST N ROWS ONLY`或`OFFSET M ROWS FETCH NEXT N ROWS ONLY`: ```sql SELECT * FROM 表名 FETCH FIRST N ROWS ONLY; SELECT * FROM 表名 OFFSET M ROWS FETCH NEXT N ROWS...

    mysql limit 分页的用法及注意要点

    此外,MySQL还支持PostgreSQL风格的`LIMIT`和`OFFSET`语法,如: ```sql SELECT * FROM table LIMIT 10 OFFSET 5; ``` 这与之前的`LIMIT 5, 10`具有相同的效果。 当`OFFSET`值为0时,`LIMIT`可以直接跟一个参数,...

    Mysql中limit的用法方法详解与注意事项

    MySQL也支持PostgreSQL的`LIMIT`和`OFFSET`语法: ```sql SELECT * FROM table LIMIT # OFFSET #; ``` 这与上面的双参数形式是等价的。 5. **负数第二个参数**: 当第二个参数为负数时,MySQL会从偏移量位置...

Global site tag (gtag.js) - Google Analytics