分页存储过程

博客主要讨论大数据量下的SQL分页问题。指出几十万行数据时,存储过程可能不如NOT IN分页,还给出了相关示例及存储过程分页代码。同时提到在asp.net中,超一万行数据不建议用Datagrid自带分页。此外,分析了游标在大数据量和小数据量表中的适用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假若你用几十万行数据,你可以看看.

你的存储过程还比不上NOT IN分页,示例:
SELECT Top 10 * FROM Customers WHERE Customerid NOT IN (SELECT TOP 20 Customerid from Customers )

declare @SQLStr varchar(8000)
set @SQLStr='SELECT Top '+cast(@每页大小 as varchar)+' * FROM 表 WHERE 主键列 NOT IN (SELECT TOP '+cast(@每页大小*@第几页 as varchar)+' 主键列 from 表 )'
exec(@SQLStr)

我个人认为最好的分页方法是:
Select top 10 * from table where id>200
写成存储过程,上面的语句要拼一下sql语句,要获得最后大于的哪一个ID号

 

 

 

那个用游标的方式,只适合于小数据量的表,如果表在一万行以上,就差劲了

 

 

你可以在SQL 查询分析器,看一下执行时间.显示执行计划,显示服务器跟踪统计,显示客户统计

以下是我用存储过程分页的方式,分页一个20万行的表,结果显示在网页中,你可以看一下速度:

http://www.bizlands.com/trade/search.asp?type=s&sortid=15

http://www.yibiz.com/trade/search.asp?sortid=5&type=供应&page=3&country=&sf=&cs=&txtitle=&DateTime=

http://www.yibiz.com/trade/search.asp?sortid=7&type=供应

 

 

 

在asp.net中,超过一万行的数据,不建议用Datagrid自带的分页方式,我一般自己写sp

 

 

 

很久前,我说过用sql的游标

游标是存放在内存中,很费内存.

游标一建立,就将相关的记录锁住,直到取消游标

游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的操作。而对于多表和大表中定义的游标(大的数据集合)循环很容易使程序进入一个漫长的等待甚至死机.

所以说,我个人的经验,就是一万上行上的表,不用游标.小数据量的表,适当的时候可以用游标

因为游标,遍历小数据量的行集还是不错的一个方法!

 

我个人认为最好的分页方法是:
Select top 10 * from table where id>200
写成存储过程,上面的语句要拼一下sql语句,要获得最后大于的哪一个ID号

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值