您的位置:首页 > 其它

普通方式 分页【NOT IN】和【>】效率大PK 千万级别数据测试结果

2013-10-30 15:44 453 查看
首现创建一张表,然后插入1000+万条数据,接下来进行测试。
use TT
go
if exists (select * from sysobjects where name='Tonge')
drop table Tonge
create table Tonge(
ID int primary key identity(1,1),
NAME varchar(100),
PWD varchar(100),
PHONE varchar(100),
BORNDATE date default getDate()
)
go

--存储过程插入10万条数据耗时:38s//平均 2600条/s
declare @i int
set @i=0
while(@i<=100000) --插入测试数据10万条
begin
insert into Tonge values('Tonge'+Convert(varchar(2),@i),'Tonge594200'+Convert(varchar(2),@i),'16886888688',default)
set @i = @i+1
end
go

--疯狂插入法插万条插入640万条数据耗时:101s //平均 63000条/s

insert into Tonge(NAME,PWD,PHONE,BORNDATE)( select NAME,PWD,PHONE,BORNDATE from Tonge ) --疯狂插入法7次 10*2*2*2*2*2*2*2=1284万条数据

go

select MAX(ID) FROM Tonge

--DBCC SHRINKFILE(TTDB_log,0) --清除事务日志

--使用 Not In 分页
declare @PageSize int,@PageIndex int,@TotalPage int
select @PageSize=1000,@PageIndex=1000
print '当前页数'+convert(varchar(5),@PageIndex)+' 总页数:' + Convert(varchar(5),@TotalPage)
--等待6分钟未果、也就是3600s、CPU暴增...
select top(@PageSize) * from Tonge
where ID not in(select top(@PageSize*(@PageIndex-1)) ID from Tonge)
order by ID

--大于号分页测试
declare @PageSize int,@PageIndex int,@TotalPage int
select @PageSize=1000,@PageIndex=1000 --每页显示1万条数据,显示第10页
--exec usp_Sign_PagedTonge @PageSize,@PageIndex,@TotalPage output
print '当前页数'+convert(varchar(5),@PageIndex)+' 总页数:' + Convert(varchar(5),@TotalPage)
--瞬间秒杀
select top(@PageSize) * from Tonge where id >
(select max(id) from
(select top (@PageSize*(@PageIndex-1)) id from Tonge order by id) emp)

测试结果:测试结果已经很明显了,那就是在普通分页中,对千万级别的数据进行分页(相同页码相同数据),Not In 简直就像是蜗牛,而大于号( > ) 简直可以比做是火箭,另一篇我会介绍使用 存储过程分页 not in 和 > 号的区别 。

博主推荐:存储过程 分页【NOT IN】和【>】效率大PK 千万级别数据测试结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: