当前位置:首页 > 系统运维 > 正文内容

sql server分页的两种 *** 比较

a8116255316年前 (2010-09-13)系统运维9

在sql server数据库中,假如一个查询结果数据量比较大,就需要在查询的时候分页,每次只返回其中一页。接下来的SQL server内容就将为您讲解比较sql server分页的两种 *** ,假如您对sql server分页感兴趣的话,不妨一看。

sql server分页之一种 *** :

思路是根据页号取出两部分数据,比如取出前90条,然后取出前100条,然后比较取出两次结果的差集。

在30万条记录的情况下,假如只分100页(结果有10000条记录),大约需要1分半钟。索引建得好的话,1分钟左右。

//select * from //这一句是不能修改的了,因为它是从结果中读取,所以必须要用*

//(select top @h_count (@filedlist) from @tableName .....) as big //取出符合条件的上限的记录

//where

//big.guid   //这里是关键,根据主键从下限结果中过滤掉重复的记录(只留下不同的数据,也就是求交集)

//not in

//(select top @l_count guid from @table .....)//下限

//order @orderby  //原来的格式,这里只保留了orderby之后的,应该保留条件之后所有的,包括gruopby什么的

函数类似如此:

  public string MakeSqlPager(string sourceSql,int pageIndex)

  {

   //使用默认页面大小

   string orderbyStr=sourceSql.Substring(sourceSql.ToLower().IndexOf("order by"));

   int index=sourceSql.ToLower().IndexOf("select");

   string bigRes="("+ sourceSql.Insert(index+6," top "+((pageIndex+1)*_pageSize).ToString()+" ")+") as big";

   string *** allRes="("+ sourceSql.Insert(index+6," top "+(pageIndex*_pageSize).ToString()+" ")+")";

   return "select * from "+bigRes+" where big.guid not in "+ *** allRes+" "+orderbyStr;

  }

这种 *** 还可以改进,就是第二次取过滤时从之一个的结果里面过滤。

sql server分页第二种 *** :

掐头去尾,程序还没写

SELECT * FROM

(

  SELECT TOP 100 * FROM

  (

    SELECT TOP 100000 * FROM pagetest ORDER BY regt ASC

   ) as a

  ORDER BY regt desc

) as b

 ORDER BY regt ASC

测试了一下,大约用时间29秒。

比较:

之一种 *** 的效率很低,猜测是因为多次需要循环比较,时间复杂度要高一个等级。比如,这种 *** 的响应时间和所取得的页号有很大关系。

第二种 *** 还是可以接受的,和页号无关,但是也需要两次比较。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://2345hao.cn/blog/index.php/post/22374.html

分享给朋友:

“sql server分页的两种 *** 比较” 的相关文章

windows 7鼠标停顿怎么办?windows 7 usb鼠标停顿的原因以及解决

windows 7鼠标停顿怎么办?windows 7 usb鼠标停顿的原因以及解决

很多使用Windows 7系统的朋友都想小编反应,假如暂停使用电脑,鼠标会出现停顿现象,这是怎么回事呢 该怎么解决呢 下面就和小编一起去看下Windows 7 usb鼠标停顿的解决方法吧。 由于Windows 7系统中有一项USB选择性暂停造成的。这项设置主要为了节电,当他检测到用户没有对系统进行...

windows 7系统开机提示press any key to restart的故障分析及解

windows 7系统开机提示press any key to restart的故障分析及解

Windows 7 64位系统开机后提示"press any key to restart",无法进入系统了,具体现象如下所示: 故障分析: 故障的主要原因还是硬盘的问题,可以先检查是不是接触不良或坏了,进行修复或更换即可。 解决方法: 1、开机按F8不动到高级选项出现在松手,选“...

windows 7系统件夹和文件都不显示名字如何解决

windows 7系统件夹和文件都不显示名字如何解决

假如碰到电脑里的文件夹和文件全都不显示名字了(如下图),是不是电脑中毒了呢 请教下笔者有没好的解决方法!下面是笔者给出的答案,希望能够帮助到大家! 首先打开你用来装图片的文件夹(缩略图下面的文字不显示的文件夹),然后但击工具栏上的“查看”选择“平铺”, 下面就是关键:要按住SHIFT键不...

windows 7系统开机后出现黑屏提示Windows无法启动

windows 7系统开机后出现黑屏提示Windows无法启动

一些用户的Windows 7系统开机后出现黑屏,代码为 Windows无法启动: WindowsSystem32ConfigSystem”。这个问题该如何修复呢?现在小编就给大家分析一下吧。 其实这个代码的意思是引导文件丢失了,引导文件(NTLDR)一般存放于C盘根目录下,是一个具有隐藏和只读属性...

ubuntu14.04打开个几个应用窗口最小化后怎么切换呢?

ubuntu14.04打开个几个应用窗口最小化后怎么切换呢?

ubuntu14.04应用窗口列表在哪里?在ubuntu下打开个几个应用窗口最小化后怎么切换呢,应用窗口列表在哪里呢? 1、多打开几个chrome浏览器窗口。 2、然后都做最小化处理。 3、现在我们在桌面左边的面板上找到"左右两边有小白点"的chrome浏览器应用图标,这就是chr...

windows 7系统下Windows服务被流氓软件注册怎么办?Windows服务

windows 7系统下Windows服务被流氓软件注册怎么办?Windows服务

解决方法: 其实处理这些使用流氓软件,需要将相关的.exe文件删除,使它不能再运行,或者直接清除这个服务本身,使计算机重启的时候,它不会再启动。比如Hijackthis扫描,在扫描日志中,一般会把非Windows系统的服务以023的方式列出来,如下面这段: O23 - ...