我已阅读并按照说明操作: What is an efficient method of paging through very large result sets in SQL Server 2005?以及变得清楚的是我通过非索引字段进行排序 - 这是因为它是来自计算的生成字段 - 它在数据库中不存在。
我正在使用row_number()技术,它运行得很好。我的问题是我的存储过程对相当多的数据进行了一些非常大的连接,并且我按照这些连接的结果进行排序。我意识到每次打页时都必须再次调用整个查询(以确保正确的排序)。
我想要的是(没有将整个结果集拉入客户端代码并在那里进行分页),一旦SQL Server获得整个结果集,它就可以通过页面
有没有内置的方法来实现这一目标? - 我认为观点可能会这样做,但我找不到相关信息。
编辑:索引视图对我不起作用,因为我需要传入参数。任何人都有更多的想法 - 我想要么我必须使用memcached或者有一个在后台构建索引的服务。我只是希望有一种方法可以让SQL Server获取该表并在分页时保持它...
答案 0 :(得分:1)
我对分页不是很熟悉,如果不知道程序背后的逻辑,我只能猜测你会从IndexedViews或带有索引的#TemporaryTables中受益。
您提到您正在按生成的非索引字段进行排序,该信息与您的过程每次调用整个查询的事实相结合会让我相信您可以将该查询设置为IndexedView。您可以多次访问它获得更好的性能,并且还可以将索引添加到您订购的字段中。
如果#TemporaryTable在您的分页请求期间保持活动状态,您也可以使用#TemporaryTable ...在#TemporaryTable中插入您正在使用的数据集,然后可以在生成的列上创建带有T-SQL的索引。 / p>
SQL Server 2005的索引视图:http://technet.microsoft.com/en-us/library/cc917715.aspx