千万条记录,怎么做分页?怎么能提高性能?

lz的问题,我也遇到过,我也挺烦恼的,不过我们倒是通过某种方式进行了解决。我把我的一些经验简单说说。
从SQL语句来说:我们的分页往往会有select count(*)的操作,这个操作其实很费时间,所以,你可以 把信息进行分类(几百万数据肯定不会没有分类吧),把这个count数,记录到分类里,这样每次就不需要count(*)了,这样我统计过,速度会提高一半,这样还有个好处,一旦发现count(*)=0了,干脆不查了,又可以提高速度。
从数据量来看,你是否可以进行数据分离,比如N多年前的数据,估计很长时间都不会用到,干脆倒到历史库里,这样会大大减少数据的检索量,对与提高速度很有好处。
第三:你是否建了索引?用什么条件查询都需要建立索引,如果需要那个字段order by 一定要创建缩聚索引,这会大大提高检索速度。
第四:很重要一个问题,搞开发的往往总嫌自己的东西不够复杂,功能不够强大,其实很多东西越简单越好,功能尽量简单一些,速度会大大提高 

 

CREATE   proc up_GetTopicList
@PageNo varchar(4)='1',@PageSize varchar(4)='20'
as
/*定义局部变量*/
declare @a_intPageNo int
declare @a_intPageSize int
declare @intBeginID int
declare @intEndID int
declare @intRecordCount int
declare @intPageCount int
declare @intRowCount int

set @a_intPageNo = cast(@PageNo as bigint)
set @a_intPageSize = cast(@PageSize as int)

/*关闭计数*/
set nocount on
/*求该分类总数 */
select @intRecordCount = count(*) from company
if @intRecordCount = 0
return 0
/*判断页数是否正确*/
if(@a_intPageNo -1)* @a_intPageSize > @intRecordCount
return (-1)

/*求开始ID*/
set @intRowCount = (@a_intPageNo -1)*@a_intPageSize +1
/*限制条数*/
set rowcount @intRowCount
select @intBeginID = companyID from company order by companyID desc

/*结束ID*/
set @intRowcount = @a_intPageNo * @a_intPageSize
/*限制条数*/
set rowcount @intRowcount
select @intEndID = companyID from company order by companyID desc

/*恢复系统变量*/
set rowcount 0
set nocount off

select companyID,companyName,remark,editDate from company where companyID between @intEndID and @intBeginID order by companyID desc
return (@intRecordCount)
GO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值