<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

    主站蜘蛛池模板: 日本一道高清不卡免费| 91大神免费观看| 四虎影视永久免费观看| 久久亚洲国产成人影院| 久久精品国产免费观看三人同眠| 亚洲Av无码专区国产乱码DVD | 亚洲AV电影天堂男人的天堂| 噼里啪啦免费观看高清动漫4| 亚洲综合综合在线| 国产精品久久永久免费| 亚洲入口无毒网址你懂的| 好吊妞在线成人免费| 亚洲第一成年网站视频| 亚洲av无码专区在线观看素人| 七次郎成人免费线路视频| 久久国产亚洲精品麻豆| 无码人妻一区二区三区免费看| 亚洲国产精品成人综合久久久| 成人片黄网站A毛片免费| 亚洲精品无码不卡在线播放| 免费大黄网站在线观| 99re8这里有精品热视频免费| 亚洲日本一区二区| 永久免费av无码网站韩国毛片| 亚洲GV天堂GV无码男同| 精品国产亚洲一区二区在线观看 | 亚洲午夜久久久影院伊人 | 69式互添免费视频| 亚洲精品无码mⅴ在线观看| 亚洲一级特黄大片无码毛片| 无码一区二区三区免费| 亚洲偷自拍另类图片二区| 亚洲一区二区三区在线播放| 免费一级毛片无毒不卡| 国产日本亚洲一区二区三区| 亚洲成a人片在线观看日本麻豆 | 久久精品国产亚洲AV麻豆王友容| 好爽又高潮了毛片免费下载 | 亚洲大片免费观看| 看免费毛片天天看| 亚洲国产人成在线观看69网站|