【问题标题】:postgresql window functions countpostgresql 窗口函数计数
【发布时间】:2018-12-08 23:09:37
【问题描述】:

我可以查询SELECT COUNT(*) OVER(), id, name, date... FROM table WHERE user_id = 1 LIMIT 20, OFFSET 0 我需要分页计数,这是如何工作的? count 是为每一行计算还是只计算一次?

它会影响索引的使用吗,因为我知道函数有时会影响索引的使用,但主要是在 where 子句中。

这样做有没有任何性能损失,而不是 2 个单独的查询(计数然后数据检索)?我不会做一个子查询,因为它会为每一行运行。

谢谢

【问题讨论】:

    标签: postgresql window-functions


    【解决方案1】:

    使用窗口函数比运行两个查询更有效。对索引的使用没有可能的影响。

    窗口函数在结果集生成之后计算,但在LIMITOFFSET 之前。结果将作为额外的列添加到每一行。

    我看不出您使用此窗口函数计算的总计数对分页有何用处。

    顺便说一句,如果没有 ORDER BY 子句,使用 LIMITOFFSET 毫无意义。

    【讨论】:

    • 好吧,如果你想生成像“last”这样的分页链接,你需要知道总数。
    猜你喜欢
    • 2018-12-15
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多