【问题标题】:SQL requests for HTTP range response headerHTTP 范围响应标头的 SQL 请求
【发布时间】:2015-05-18 13:23:23
【问题描述】:

我目前正在 Ruby on Rails 应用程序上实现基于 HTTP 范围标头的分页,我想知道 SQL 性能。

与传统的pageper_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


【解决方案1】:

在 MySQL 中,您可以像这样使用 FOUND_ROWS()SQL_CALC_FOUND_ROWS

SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
WHERE id > 100 LIMIT 10;

如果没有限制,则获取总行数:

SELECT FOUND_ROWS();

你不能节省很多,但你可以节省一些。还有,your mileage may vary

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2014-12-18
    • 2013-03-27
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多