【问题标题】:What performance gains can I expect from database paging?我可以从数据库分页中获得哪些性能提升?
【发布时间】:2010-06-10 17:08:29
【问题描述】:

假设我有一个包含 100 条记录的表 X,运行 select * from X 需要 100 秒。

查询select top 10 * from X 需要多长时间?

我希望这种关系或多或少是线性的,所以 10 秒。这是正确的,还是关系在某种程度上是非线性的?

【问题讨论】:

  • 用你最喜欢的 rdbms 的分页语法替换第二个查询中的 top。我只是在寻找“一般”的答案

标签: database paging rdbms-agnostic


【解决方案1】:

您的绩效成本体现在两个不同的方面:

  • 执行查询需要多长时间
  • 返回结果需要多长时间

通常,查询会很快,但返回结果会很慢,因为它受 I/O 限制。如果是这种情况,那么您将通过返回更少的结果看到近似线性的加速。

但是,如果查询本身很复杂,情况就不同了。如果不仅仅是select * from X,而是select * from X where [complicated-expression],那么数据库实现之间的结果可能会有很大差异。在这种情况下,您的性​​能可能会受到查询复杂性的支配,在这种情况下,仅返回较少的结果不会给您带来太多好处。

【讨论】:

  • 当然,在任何情况下您都不想使用 select *。出于性能考虑,永远不要返回除您需要的列之外的任何列,并且如果您有连接,则总有您不需要的列。为了便于维护,永远不要依赖 select *,因为它可能会在进行数据库更改时导致事情中断。例如,假设您在 UNION 查询中使用了 select *,并且只有一个联合分支具有添加了附加列的表。假设您正在向用户显示数据并且添加了您不希望用户看到的列?
猜你喜欢
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 2014-09-06
相关资源
最近更新 更多