用于大于1,000,000行并且可能还有更多数目的表!在sql 2008中使用大型表进行高效分页
还没有做任何基准自己所以想得到专家的意见。
看了看ROW_NUMBER()的一些文章,但它似乎会影响性能
什么其他的选择/替代方案?
用于大于1,000,000行并且可能还有更多数目的表!在sql 2008中使用大型表进行高效分页
还没有做任何基准自己所以想得到专家的意见。
看了看ROW_NUMBER()的一些文章,但它似乎会影响性能
什么其他的选择/替代方案?
我们使用row_number()
的效果很好,并没有真正的性能问题。我们的分页查询的基本结构是这样的:
WITH result_set AS (
SELECT
ROW_NUMBER() OVER (ORDER BY <ordering>) AS [row_number],
x, y, z
FROM
table
WHERE
<search-clauses>
) SELECT
*
FROM
result_set
WHERE
[row_number] BETWEEN a AND b
它工作正常,我们用> 1,000,000行的表。
我的理解是性能是服务器负载和服务器资源等的一个函数,请参阅上述备注中的两个链接pov – Kumar 2010-03-16 00:55:04
正如我所说的,我们实际在具有> 1,000,000条记录的表中使用此功能。结果在<100ms内返回(当然取决于搜索条件)。当然,性能将成为服务器负载的一个函数,也是您特定的使用场景。 – 2010-03-16 01:05:43
我想你有足够数量的RAM,以便表格被完全缓存。我只是试着用一个简单的表'人(电子邮件,名字,姓氏)'包含3.000.000记录,但分页到最后记录需要6秒以上的查询。我正在使用sql server 2008 r2。我错过了什么。 – broadband 2013-12-27 11:34:22
你介意共享显示row_number()不执行的文章... – 2010-03-15 04:13:58
除了最琐碎的查询之外,所有的查询都需要索引和最新的统计信息才能正常运行。 – 2010-03-15 04:22:17
Duplicate:http://stackoverflow.com/questions/1897436/row-number-over-not-fast-enough-with-large-result-set-any-good-solution – 2010-03-15 04:24:51