当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-01-25 23:11:00  来源:本站整理

sql server分页的两种办法对比[MSSQL防范]

赞助商链接



  本文“sql server分页的两种办法对比[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

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 smallRes="("+ sourceSql.Insert(index+6," top "+(pageIndex*_pageSize).ToString()+" ")+")";
   return "select * from "+bigRes+" where big.guid not in "+smallRes+" "+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秒.

对比:
第一种办法的效率很低,猜想是因为多次需求循环对比,时间复杂度要高一个等级.比方,这种办法的呼应时间和所获得的页号有很大关系.
第二种办法还是可以承受的,和页号无关,但是也需求两次对比.

<
  以上是“sql server分页的两种办法对比[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 搭配 IIS7 PHP MySQL 环境
  • sqlserver索引的原理及索引成立的注意事项小结
  • SQL Join的一些总结(实例)
  • SQL的Join利用图解教程
  • SQL中JOIN和UNION辨别、用法及示例介绍
  • 关于SQL中CTE(公用表表达式)(Common Table Expression)的总结
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .