Database 我期望从数据库分页中获得什么性能增益?

Database 我期望从数据库分页中获得什么性能增益?,database,paging,rdbms-agnostic,Database,Paging,Rdbms Agnostic,假设我有一个表X,其中有100条记录,运行select*from X需要100秒 查询从X中选择前10个*需要多长时间 我希望这种关系或多或少是线性的,所以10秒。这是正确的,还是这种关系在某种程度上是非线性的 您的性能成本在两个不同的方面: 执行查询需要多长时间 返回结果需要多长时间 通常,查询会很快,但返回结果会很慢,因为它是受I/O限制的。如果是这种情况,那么您将通过返回较少的结果看到近似线性的加速 但是,如果查询本身很复杂,情况就不同了。如果不仅仅是select*from X,而是s

假设我有一个表X,其中有100条记录,运行
select*from X
需要100秒

查询
从X中选择前10个*
需要多长时间


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

您的性能成本在两个不同的方面:

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


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

在第二个查询中,用您最喜欢的rdbms分页语法替换
top
。我只是在寻找一个“一般”的答案,当然,在任何情况下,您都不想使用select*。出于性能考虑,永远不要返回除所需列之外的任何列,如果有联接,则始终会返回不需要的列。对于可维护性,永远不要依赖select*,因为它可能会导致数据库更改时出现故障。例如,假设您在联合查询中使用select*,并且只有一个联合分支具有添加了附加列的表。假设您正在向用户显示数据,并且添加了不希望用户看到的列?