無為

          無為則可為,無為則至深!

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks

          微軟新的SQL Server 2005新增了數(shù)據(jù)庫分頁功能,以后再也用寫復(fù)雜不靈活而低效率的分頁存儲過程。
          新的數(shù)據(jù)庫分頁功能的核心是一個叫row_number的函數(shù)
          具體如下:

          返回結(jié)果集分區(qū)內(nèi)行的序列號,每個分區(qū)的第一行從 1 開始。

          語法
          ?
          ROW_NUMBER ( )???? OVER ( [ <partition_by_clause> ] <order_by_clause> )
          ?

          備注
          ORDER BY 子句可確定在特定分區(qū)中為行分配唯一 ROW_NUMBER 的順序。

          參數(shù)
          <partition_by_clause>

          將 FROM 子句生成的結(jié)果集劃入應(yīng)用了 ROW_NUMBER 函數(shù)的分區(qū)。

          <order_by_clause>

          確定將 ROW_NUMBER 值分配給分區(qū)中的行的順序。有關(guān)詳細信息,請參閱 ORDER BY 子句 (Transact-SQL)。

          有關(guān)詳細信息,請參閱 OVER 子句 (Transact-SQL)。

          返回類型
          bigint

          示例
          以下示例將根據(jù)年初至今的銷售額,返回 AdventureWorks 中銷售人員的 ROW_NUMBER。

          ?復(fù)制代碼
          USE AdventureWorks
          GO
          SELECT c.FirstName, c.LastName, ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number', s.SalesYTD, a.PostalCode
          FROM Sales.SalesPerson s JOIN Person.Contact c on s.SalesPersonID = c.ContactID
          JOIN Person.Address a ON a.AddressID = c.ContactID
          WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0
          ?

          以下示例將返回行號為 50 到 60(含)的行,并以 OrderDate 排序。

          ?復(fù)制代碼
          USE AdventureWorks;
          GO
          WITH OrderedOrders AS
          (SELECT SalesOrderID, OrderDate,
          ROW_NUMBER() OVER (order by OrderDate)as RowNumber
          FROM Sales.SalesOrderHeader )
          SELECT *
          FROM OrderedOrders
          WHERE RowNumber between 50 and 60;?

          ==============================
          進過我對百萬行數(shù)據(jù)記錄的分頁測試,效率比以前網(wǎng)上能夠找到的最好的存儲過程(個人意見)稍高。
          但是還是比同樣的Oralce的分頁效率低。



          凡是有該標(biāo)志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
          、轉(zhuǎn)載請注明來處和原文作者。非常感謝。

          posted on 2006-06-10 13:20 草兒 閱讀(4878) 評論(2)  編輯  收藏 所屬分類: DotNet

          Feedback

          # re: Microsoft SQL Server 2005 查詢分頁 2009-06-21 22:24 傲翔白鴿
          樓主我真不知道你是怎么測試的,我只是想說你的結(jié)果有待確認的.網(wǎng)上的分頁程序(也包括我自己寫的,在百萬條記錄的效果要超過你說的這種方法.  回復(fù)  更多評論
            

          # re: Microsoft SQL Server 2005 查詢分頁 2009-06-21 22:27 傲翔白鴿
          當(dāng)然也不排除這種算法在特定的場合下比較快.  回復(fù)  更多評論
            

          主站蜘蛛池模板: 宁乡县| 南京市| 屯留县| 商水县| 吉林省| 达孜县| 新晃| 嘉荫县| 扎兰屯市| 临澧县| 疏附县| 墨竹工卡县| 肥西县| 大名县| 阜宁县| 兴安县| 湘西| 山阳县| 许昌市| 兰西县| 民丰县| 定日县| 泗洪县| 大渡口区| 济阳县| 崇信县| 民丰县| 青浦区| 曲靖市| 麻阳| 临泉县| 玛曲县| 塘沽区| 肇东市| 郴州市| 邹平县| 康乐县| 华亭县| 砚山县| 太保市| 西安市|