欢迎来到天天文库
浏览记录
ID:41514650
大小:122.73 KB
页数:10页
时间:2019-08-26
《sqlserver数据库分页查询技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、SQLServer数据库分页查询技术1•引言在列表查询时由于数据量非常多,一次性查出来会非常慢,就算一次查出来了,也不能一次性显示给客户端,所以要把数据进行分批查询出来,每页显示一定虽的数据,这就是数据要分页。2•常用的数据分页方法我们经常会碰到要収11到m条记录,就是有分页思想,下而罗列一下般的方法。我本地的一张表tbl_FlightsDetail,有300多W记录,主键FlightsDetaillD(Guid),要求按照FlightsDet^illD排序取3000001至IJ3000010之间的10条记
2、录,也是百万级。方法1定位法(利用工D大于多少)语句形式:selecttop10*fromtbl_FlightsDetailwhereFlightsDetailID>(selectmax(FlightsDetaillD)from(selecttop3000000FlightsDetaillDfromtbl_FlightsDetailorderbyFlightsDetailZCD)ast)orderbyFlightsDetaillD执行计划:J無1.j褪r执的划査询1:(与该扌丄有关的)查诃片销:1D0*se
3、lecttop10•froa.tbl^FiightsDetailwhereFlightsDetailID>(selectmax(FlightsDetaillD)fioz(sslecttop3000000FlightsDetaillDfioa9血內对行.(local)(10.0SP2)byc010-PCbyc010(54)Byc.OrderCenter
4、00:00011106先杳出top300000,再聚合取这个集合中最人的Idl,再过滤id大于idl的集合(上图中使用到索引),再取top10条。方法2(利
5、用NotIn)语句形式:selecttop10*fromtbl_FlightsDetailwhereFlightsDetaillDnotin(selecttop3000000FlightsDetaillDfromtbl_FlightsDetailorderbyFlightsDetaillD)orderbyFlightsDetaillD执行计划:勺査S己戍功执行.(Izl)(10QSP2)byc010-PCbyc010(54)Byc.OrderCenter
6、00:00:08
7、10行和方法一类似,只是过滤wh
8、ere条件不一样,这里用到的是notin,上图中没有用到索引,耗吋8秒。如果FlightsDetaillD不是索引的话,方法1和该方法将差不多。方法3(利用颠颠倒倒top)语旬形式:selecttop10*from(selecttop3000010*fromtbl_FlightsDetailorderbyFlightsDetaillD)astorderbyt.FlightsDetaillDdesc执行计划:先取前I何3000010条记录,再倒序,这时再取前Mi10条即是300001到300010条记录,没有
9、用到索引,耗时秒方法4(ROW_NUMBER()函数)语句形式:select*from(select*zROW_NUMBER()OVER(ORDERBYFlightsDetailID)asrankfromtbl_FlightsDetail)astwheret•rankbetween3000001and3000010执行计划:©结果二箱T3执行计划査词1:(芍後批有关的)査询丹桶:100*3elect*from[select*fR0W_NUMB£R()OVER(ORDERSYFlightsDetaillD)a
10、mranZfromt&l_FlightsDetail)amtwheret・rankbetween30033菇尿选署<^=3箭几行<=J序列!I搠(Filter)(Tcp>Scalar)皿开隼:"开餡:09UD段Segzent)开餡:0%(Clustered:.[匸bl.FlxghsDe二匸1].[P兀TBL.FLItHT—齐销:99涉壹词已成功执行.(local](10.0SP2)byc010-PCbyc010(54)Byc.OrderCenter00:aH)210fjSql2005版本或以上支持,也没
11、用到索引,耗时2秒,速度还不错。方法5(利用TN)此方法是由金色海洋(jyk)阳光男孩回复的,飞常感谢,语句形式:selecttop10*fromtbl_FlightsDetailwhereFlightsDetailIDin(selecttop10FlightsDetailIDfrom(selecttop3000010FlightsDetailIDfromtbl_FlightsDetailorderbyFligh
此文档下载收益归作者所有