1

I need to give away results of the query in response to a following URL:

http://foo.com/search?from=20&perpage=10

What is the best practice from performance point of view?

  1. Run the query every time with WHERE row > N and row <= K

  2. Run query once and keep all the result for certain amount of time

  3. What else could be done?

4

1 回答 1

2

如果您的查询将产生非常少量的数据,您可以考虑缓存结果。但是想想这个:

  • 高性能分页并非易事。它可以在数据库端以更好的性能完成(如果您使用的是 Microsoft SQL Server 2012,它有自己的扩展)。
  • 分页由用户完成,他们需要时间来读取数据并单击“下一页”按钮。新查询的性能影响不会很大,并且数据库将比我们能做的更好地处理自己的缓存。
  • 缓存大量数据是无用的,消耗内存且效率低于新查询。

然后我的答案是每次都运行查询。您的数据库将比您更好地处理它,并且它会随着您的数据扩展(否则当您的系统将有 1000000 条记录时,可能适用于 500 条记录的内容将被破坏)。

总结一下:数据库引擎在缓存数据方面比我们更有效,并且它们的扩展性更好,(通常)一个好的索引就是它们表现良好所需要的。

于 2012-07-18T10:37:31.970 回答