作者:李洪根 微软MVP
Select
top
10
*
from
table
where
id
>
200
SELECT
Top
10
*
FROM
Customers
WHERE
Customerid
NOT
IN
(
SELECT
TOP
20
Customerid
from
Customers)
declare
@SQLStr
varchar
(
8000
)
set
@SQLStr
=
'
SELECTTop
'
+
cast
(@每页大小
as
varchar
)
+
'
*FROM表WHERE主键列NOTIN(SELECTTOP
'
+
cast
(@每页大小
*
@第几页
as
varchar
)
+
'
主键列from表)
'
exec
(@SQLStr)
1。我个人认为最好的分页方法是:
Select
top
10
*
from
table
where
id
>
200
写成存储过程,上面的语句要拼一下sql语句,要获得最后大于的哪一个ID号
2。那个用游标的方式,只适合于小数据量的表,如果表在一万行以上,就差劲了
你的存储过程还比不上NOT IN分页,示例:
SELECT
Top
10
*
FROM
Customers
WHERE
Customerid
NOT
IN
(
SELECT
TOP
20
Customerid
from
Customers)
declare
@SQLStr
varchar
(
8000
)
set
@SQLStr
=
'
SELECTTop
'
+
cast
(@每页大小
as
varchar
)
+
'
*FROM表WHERE主键列NOTIN(SELECTTOP
'
+
cast
(@每页大小
*
@第几页
as
varchar
)
+
'
主键列from表)
'
exec
(@SQLStr)
3。以下是我用存储过程分页的方式,分页一个20万行的表,结果显示在网页中,你可以看一下速度:
http://www.bizlands.com/trade/search.asp?type=s&sortid=15
4。很久前,我说过用sql的游标
游标是存放在内存中,很费内存.
游标一建立,就将相关的记录锁住,直到取消游标
游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的操作。而对于多表和大表中定义的游标(大的数据集合)循环很容易使程序进入一个漫长的等待甚至死机.
所以说,我个人的经验,就是一万上行上的表,不用游标.小数据量的表,适当的时候可以用游标
因为游标,遍历小数据量的行集还是不错的一个方法!
5。用临时表自定义分页和使用游标自定义分页都不好!
博客讨论了SQL分页方法,认为写成存储过程是较好的分页方式,还指出用游标的方式仅适合小数据量表,对于一万行以上的表性能较差。同时提到存储过程分页在处理20万行表时的速度展示,强调大数据量表不用游标,小数据量表可适当使用。
171

被折叠的 条评论
为什么被折叠?



