我无法理解窗口函数的概念。它们究竟是如何工作的,这种技术的利弊是什么?
我读过,使用限制和偏移是缓慢的,但它仍然使用。因此,在限制/偏移和窗口函数之间的决定取决于从db或窗口函数获取的数据的大小,还是应该始终使用?
什么是理想的窗口大小,以获得最大的性能从这?如果要获取的行数较少,那么只需使用极限/偏移量,这种情况会发生吗?
我的用例基本上需要按日期对数据进行排序,然后将最新数据放在第一位。在这种情况下,窗口功能是如何适应的。
发布于 2012-03-23 06:44:24
基本的区别是,窗口函数应用于结果集中的所有行,以便在结果集的其余部分确定后计算额外的列。没有一行被丢弃。它们可以从PostgreSQL 8.4开始使用。
另一方面,LIMIT
和OFFSET
命令的SELECT
子句不计算其他列。他们只是从结果集中(与ORDER BY
子句合作)选择一个特定的行“窗口”,然后丢弃其余的行。永远都在那里。
虽然某些任务可以使用这两种工具中的任何一种来完成,但它们本质上是非常不同的。
为了你的简单任务
按日期对数据进行排序,然后将最新数据放在首位。
你不需要他们两个人。只需添加:
ORDER BY date_col DESC
根据你的评论,你需要:
SELECT col1, col2
FROM tbl
ORDER BY date_col DESC
LIMIT 100 -- 100 latest rows
OFFSET 0; -- just noise, but may be easier to code
检索更多:
...
LIMIT 100
OFFSET 100; -- next page of 100 rows ...
无论是哪种情况,都要确保在date_col上有一个索引!
https://dba.stackexchange.com/questions/15457
复制相似问题