【发布时间】:2015-05-18 13:23:23
【问题描述】:
我目前正在 Ruby on Rails 应用程序上实现基于 HTTP 范围标头的分页,我想知道 SQL 性能。
与传统的page 和per_page 查询字符串参数不同,range header 设计允许服务器通知客户端数据库中的总结果数。例如:
Content-Range: 0-4/123
通知:
- 集合包含 5 条记录,
- 数据库包含 123 条记录。
但我想知道表演。如果我们使用这种分页设计,那么我们必须做 2 个 SQL 请求:
- 1 个请求获取 5 个项目,
- 1 次请求获取项目总数。
我说的对吗?或者有没有办法在没有缺点的情况下找到这两个信息?
【问题讨论】:
-
您可能会破解一个同时选择项目和计数的 SQL 查询,但它会比两个查询快得多吗?
-
你的意思是,有一个子查询?如果你有例子,请给我看。
-
result = User.select('users.*, COUNT(id) OVER() AS tc').limit(5)。result.first.tc == User.count # true但是这是 Postgres 专用的。 -
而且会搞乱正常的计数方法和收集的其他东西。
标签: mysql sql ruby-on-rails postgresql http