[数据库] 通用分页存储过程第2/5页

 更新时间:2007年02月09日 00:00:00   作者:  

临时表

首先,我准备先来说一下临时表方法,这是一个广泛被建议使用的解决方案,我在项目中遇到过好几次了,这里有另一篇解释它如何工作的文章,还有一个如何在DataGrid中是用定制化分页(Custom Paging)的例子:

ASP.NET DataGrid分页 第二部分 – 定制化分页

这两篇文章中的方法都是通过把主键数据拷贝到临时表中,然后对主查询做join实现查询优化。下面让我们来看看这个方法的实质:

复制代码 代码如下:

CREATE TABLE #Temp ( 
    ID int IDENTITY PRIMARY KEY, 
    PK  /* here goes PK type */ 


INSERT INTO #Temp SELECT PK FROM Table ORDER BY SortColumn 

SELECT   FROM Table JOIN #Temp temp ON Table.PK = temp.PK ORDER BY temp.ID  
WHERE ID > @StartRow AND ID < @EndRow 

通过把所有的行拷贝到临时表中,我们可以对查询进一步的优化(SELECT TOP EndRow …),但是关键在于最坏情况——一个包含100万记录的表就会产生一个100万条记录的临时表。考虑到这样的情况,再看看上面文章的结果,我决定在我的测试中放弃该方法

相关文章

最新评论