日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
sqlserver分頁的兩種方法比較

在sql server數(shù)據(jù)庫中,如果一個查詢結果數(shù)據(jù)量比較大,就需要在查詢的時候分頁,每次只返回其中一頁。下面就將為您講解比較sql server分頁的兩種方法,如果您對sql server分頁感興趣的話,不妨一看。

sql server分頁***種方法:
思路是根據(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;
  }

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

sql server分頁第二種方法:
掐頭去尾,程序還沒寫
SELECT * FROM
(
  SELECT ***00 * FROM
  (
    SELECT ***00000 * FROM pagetest ORDER BY regt ASC
   ) as a
  ORDER BY regt desc
) as b
 ORDER BY regt ASC

測試了一下,大約用時間29秒。

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


當前題目:sqlserver分頁的兩種方法比較
標題鏈接:http://www.dlmjj.cn/article/dhgjopg.html