2012-08-15 143 views
0

我正在寻找做一些有效的分页,并发现这个链接,说“圣杯”是最好的办法。SQL Server寻呼和圣杯

http://www.sqlservercentral.com/articles/T-SQL/66030/

是只是被用来作为一个例子的表,或者是它实际上解决方案的一部分。我的意思是你如何用一个有许多连接,相同方法的表来做到这一点?有人可以发表一个例子吗?

+0

只需选择任何一组表格? – 2012-08-15 21:29:27

回答

1

表“[INFORMATION_SCHEMA] .columns”仅作为示例使用。

我会使用相同的方法的表有很多连接。只要确保你有适当的索引。

“Holy Grial”解决方案只是为您提供分页结果以及指示行总数的列,而无需额外开销。您可以在另一个查询中获取行的总数。

注意文章的结论年代:

....这种方法是最适合于从复杂 查询,其中I/O是主要的瓶颈较小的结果集。 Jeff Moden,Peso和 这里的其他人已经指出,对于更大的结果集,您节省的I/O成本 远远超过CPU成本。

+0

所以为了获得这种性能提升,ROW_NUMBER()OVER(ORDER BY table_name,column_name)AS seq, ROW_NUMBER()OVER(ORDER BY table_name DESC,column_name desc)AS totrows,两个row_number是相反顺序吗? – 2012-08-15 22:27:09

+0

是的。这只是为了减少开销。只需一个查询即可获得分页结果和总行数。例如:“产品”表有5000行。我想看第20页,有100行。这将是1901至2000行。在同一个查询中使用ROW_NUMBER()两次,可以获得总行数(5000)。其他方式,你必须为此写另一个查询。 – Nathan 2012-08-15 22:56:23