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  分页
if exists(select * from sysobjects where name='usp_NotIn_PagedTonge')
drop procedure usp_NotIn_PagedTonge
go
create procedure usp_NotIn_PagedTonge
 @PageSize int,   --每页显示的条数
 @PageIndex int,   --当前页数
 @TotalPage int output --总共页数
AS
 declare @TotalCount int --总条数
 select @TotalCount=COUNT(ID) from Tonge
 if(@TotalCount%@PageSize=0) --总共的页数
  set @TotalPage = @TotalCount/@PageSize
 else
  set @TotalPage = @TotalCount/@PageSize+1
 if(@PageIndex=1)
  select top(@PageSize)  ID,NAME,PHONE,BORNDATE from Tonge
 else
  select top(@PageSize)  ID,NAME,PHONE,BORNDATE  from Tonge
  where ID not in(select top(@PageSize*(@PageIndex-1)) ID from Tonge)
  order by ID
GO
 
 
--使用 大于号(>) 分页
if exists(select * from sysobjects where name='usp_Sign_PagedTonge')
drop procedure usp_Sign_PagedTonge
go
create procedure usp_Sign_PagedTonge
 @PageSize int,
 @PageIndex int,
 @TotalPage int output
as
 declare @TotalCount int
 select @TotalCount=COUNT(id) from Tonge
 if(@TotalPage%@PageSize=0)
  set @TotalPage=@TotalCount/@PageSize
 else
  set @TotalPage=@TotalCount/@PageSize +1
 if(@PageIndex=1)
  select top(@PageSize)  ID,NAME,PHONE,BORNDATE  from Tonge
 else
 --在这里查询的时候用列名代替*号,这样可以提高查询效率减少没有必要的检索
  select top(@PageSize)  ID,NAME,PHONE,BORNDATE  from Tonge where id >
  (select max(id) from
  (select top (@PageSize*(@PageIndex-1)) id from Tonge order by id) emp)
go
 
--NotIn分页测试
declare @PageSize int,@PageIndex int,@TotalPage int
select @PageSize=1000,@PageIndex=1000
--exec usp_NotIn_PagedTonge @PageSize,@PageIndex,@TotalPage output
print '当前页数'+convert(varchar(5),@PageIndex)+' 总页数:' + Convert(varchar(5),@TotalPage)
 
--大于号分页测试
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)
 
总结:使用存储过程分页,不管是【>】还是【Not IN】查询1万条数据,且在页数相同的情况下,显示相同条数的数据。耗时都在1s左右,简直是不分上下,于是我决定再用普通分页的方式在对千万级别的数据进行测试。

存储过程 分页【NOT IN】和【>】效率大PK 千万级别数据测试结果的更多相关文章

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

    首现创建一张表,然后插入1000+万条数据,接下来进行测试. use TTgoif exists (select * from sysobjects where name='Tonge')drop t ...

  2. (转)常见存储过程分页PK赛——简单测试分析常见存储过程分页速度

    原文地址:http://www.cnblogs.com/yangyy753/archive/2013/01/23/2872753.html 数据的分页是我们再熟悉不过的功能了,各种各样的分页方式层出不 ...

  3. 改良版的SQL Service 通用存储过程分页

    上次写了通用存储过程.感觉还是有很大的BUG.就是条件不能参数画化.这个BUG可以说是致命的.但是我一直想在用什么方法能解决这个东西.其实我只是想写少量的代码来做更多的事情.我想能不能传集合给存储过程 ...

  4. MS SQLSERVER通用存储过程分页

    最近在面试的时候,遇到个奇葩的秃顶老头面试官. 问:写过存储过程分页吗? 答:没写过,但是我知道分页存储的原理,我自己也写过,只是在工作中没写过. 问:那你这么多年工作中就没写过吗? 答:的确没写过, ...

  5. 【原创】10万条数据采用存储过程分页实现(Mvc+Dapper+存储过程)

    有时候大数据量进行查询操作的时候,查询速度很大强度上可以影响用户体验,因此自己简单写了一个demo,简单总结记录一下: 技术:Mvc4+Dapper+Dapper扩展+Sqlserver 目前主要实现 ...

  6. 我的sql数据库存储过程分页- -

    以前用到数据库存储过程分页的时候都是用 not in 但是最近工作的时候,随着数据库记录的不断增大,发现not in的效率 真的不行 虽然都设置了索引,但是当记录达到10w的时候就发现不行了,都是需要 ...

  7. Mvc+Dapper+存储过程分页10万条数据

    10万条数据采用存储过程分页实现(Mvc+Dapper+存储过程) 有时候大数据量进行查询操作的时候,查询速度很大强度上可以影响用户体验,因此自己简单写了一个demo,简单总结记录一下: 技术:Mvc ...

  8. LINQ 分页 和存储过程分页

    存储过程分页 SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY CreateDate DESC) AS RowNo, EstateAddress, E ...

  9. 设计模式之行为类模式大PK

                                        行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...

随机推荐

  1. 用CSS3写的小案例-图片缩放隐藏内容显示

    思路分析 (1).搭建界面 (2).鼠标移到图片的时候,放大显示 (3).鼠标移入到当前的li标签里面找到后面的div让其显示出来 <!DOCTYPE html> <html lan ...

  2. Oracle中的CR块详解

    1.概述 Cr块consistent read块也就是用来维护oracle的读一致性的数据块.当查询某些数据的时候,发现数据块的版本比我们要查询的新,例如session1执行了dml操作并没有提交,s ...

  3. EXTJS 4.2 资料 控件之checkboxgroup的用法(静态数据)

    1.页面 1.1点击‘横幅’,需要动态显示隐藏文本框 { xtype: 'fieldset', title: '指定附加图&横幅设置', collapsible: true, items: [ ...

  4. 【BZOJ 2744 】[HEOI2012]朋友圈

    Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...

  5. 【Linux】设定一个能输入中文的英文环境!

    引子:centos startx 进入桌面后使用中文输入法 这个解决方法太蠢了,而且只适用于centos等red系系统... 在此提供一个更加通用的方法 => 只要设置好系统的locale坏境变 ...

  6. java第一课:环境、变量、数据类型

    一.java编程注意事项1.java区分大小写2.每条语句结尾有分号3.上下级代码注意缩进4.大括号要成对出现5.标点符号要用英文半角(半角全角区别)二.eclipse1.eclipse是自编译及时编 ...

  7. 1031: [JSOI2007]字符加密Cipher - BZOJ

    Description喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不同的读法.例如下图,可以读作: ...

  8. 1176: [Balkan2007]Mokia - BZOJ

    Description维护一个W*W的矩阵,每次操作可以增加某格子的权值,或询问某子矩阵的总权值. 修改操作数M<=160000,询问数Q<=10000,W<=2000000.Inp ...

  9. ExtJS4.2学习(10)分组表格控件--GroupingGrid(转)

    鸣谢网址:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-17/179.html ------------- ...

  10. php站点

    thinkphp wordpress 记事狗 phpcms http://jingyan.baidu.com/article/4b07be3c61e93e48b380f3fd.html