<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    風人園

    弱水三千,只取一瓢,便能解渴;佛法無邊,奉行一法,便能得益。
    隨筆 - 99, 文章 - 181, 評論 - 56, 引用 - 0
    數(shù)據(jù)加載中……

    sql server2000數(shù)據(jù)分頁的兩種方法

    如果一個查詢的結果數(shù)據(jù)量巨大,就需要數(shù)據(jù)查詢的時候就分頁,每次只返回其中一頁

    第一種方法:
    思路是根據(jù)頁號取出兩部分數(shù)據(jù),比如取出前90條,然后取出前100條,然后比較取出兩次結果的差集。

    在30萬條記錄的情況下,如果只分100頁(結果有10000條記錄),大約需要1分半鐘。索引建得好的話,1分鐘左右。


    //select * from //這一句是不能修改的了,因為它是從結果中讀取,所以必須要用*
    //(select top @h_count (@filedlist) from @tableName .....) as big //取出符合條件的上限的記錄
    //where
    //big.guid   //這里是關鍵,根據(jù)主鍵從下限結果中過濾掉重復的記錄(只留下不同的數(shù)據(jù),也就是求交集)
    //not in
    //(select top @l_count guid from @table .....)//下限
    //order @orderby  //原來的格式,這里只保留了orderby之后的,應該保留條件之后所有的,包括gruopby什么的

    函數(shù)類似如此:
      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;
      }

    這種方法還可以改進,就是第二次取過濾時從第一個的結果里面過濾。

    第二種方法:
    掐頭去尾,程序還沒寫
    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秒。

    比較:
    第一種方法的效率很低,猜測是因為多次需要循環(huán)比較,時間復雜度要高一個等級。比如,這種方法的響應時間和所取得的頁號有很大關系。
    第二種方法還是可以接受的,和頁號無關,但是也需要兩次比較

    網(wǎng)上還有使用比較ID的方法的,但是不是所有的表都有ID,即使有,也不一定是int類型的。
    還有用存儲過程創(chuàng)建臨時表的,我還沒有測試效率如何

    sqlserver里面沒有rownum 這個功能(最新的2005beta2版本據(jù)說有了,Oracle里面有),所以一次比較就能分頁的算法還真不好寫

    posted on 2009-06-02 08:30 風人園 閱讀(534) 評論(0)  編輯  收藏 所屬分類: Database

    主站蜘蛛池模板: 成人免费a级毛片| 亚洲女人被黑人巨大进入| 亚洲AV无码欧洲AV无码网站| 亚洲国产精品久久| 亚洲欧美日韩一区二区三区| 精品免费久久久久久久| 免费A级毛片无码A| 国产精品亚洲综合| 18以下岁毛片在免费播放| 亚洲午夜成人精品电影在线观看| 精品久久久久亚洲| 一区国严二区亚洲三区| 成人免费网站视频www| 国产精品无码免费播放| 伊人久久亚洲综合影院首页| 好男人视频社区精品免费| 蜜芽亚洲av无码一区二区三区| 免费在线观看中文字幕| 久久免费观看视频| 国产一区二区三区在线免费观看| 色视频在线观看免费| 全免费a级毛片免费**视频| 久久久久亚洲精品日久生情| 亚洲精品视频在线观看免费| 亚洲欧洲无码AV不卡在线| 国产免费69成人精品视频| 男女拍拍拍免费视频网站| 亚洲一区影音先锋色资源| 国产成人无码区免费网站| 亚洲图片一区二区| 国产精品久久久久久久久久免费| 国产成人亚洲午夜电影| 亚洲一区二区三区影院 | 在线观看片免费人成视频播放| 久久久久亚洲精品无码系列| 二个人看的www免费视频| 91精品国产亚洲爽啪在线影院| ww4545四虎永久免费地址| 亚洲小说图片视频| 久久精品国产亚洲精品| a毛片全部免费播放|