sql server資料分頁 比較

來源:互聯網
上載者:User

 靠UI分頁只是一部分

如果一個查詢的結果資料量巨大,就需要資料查詢的時候就分頁,每次只返回其中一頁

第一種方法:
思路是根據頁號取出兩部分資料,比如取出前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;
  }

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

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

比較:
第一種方法的效率很低,猜測是因為多次需要迴圈比較,時間複雜度要高一個等級。比如,這種方法的回應時間和所取得的頁號有很大關係。
第二種方法還是可以接受的,和頁號無關,但是也需要兩次比較

網上還有使用比較ID的方法的,但是不是所有的表都有ID,即使有,也不一定是int類型的。
還有用預存程序建立暫存資料表的,我還沒有測試效率如何

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.