分享java帶來的快樂

          我喜歡java新東西

          SQLServer 分頁sql

          有關分頁 SQL 的資料很多,有的使用存儲過程,有的使用游標。本人不喜歡使用游標,我覺得它耗資、效率低;使用存儲過程是個不錯的選擇,因為存儲過程是經過預編譯的,執行效率高,也更靈活。先看看單條 SQL 語句的分頁 SQL 吧。

          方法1:
          適用于 SQL Server 2000/2005
          SELECT TOP 頁大小 *頁數
          FROM table1
          WHERE id NOT IN
                    (
                    
          SELECT TOP 頁大小*(-1) id FROM table1 ORDER BY id
                    )
          ORDER BY id

          方法2:
          適用于 SQL Server 2000/2005
          SELECT TOP 頁大小 *頁數
          FROM table1
          WHERE id >
                    (
                    
          SELECT ISNULL(MAX(id),0
                    FROM 
                          (
                         
          SELECT TOP 頁大小*(-1) id FROM table1 ORDER BY id
                          ) 
          A
                    )
          ORDER BY id

          方法3:
          適用于 SQL Server 2005

          SELECT TOP 頁大小 * 頁數
          FROM 
                  (
                  
          SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
                  ) A
          WHERE RowNumber > 頁大小*(頁數-1)


          說明,頁大?。好宽摰男袛担豁摂担旱趲醉?。使用時,請把“頁大小”和“頁大小*(頁數-1)”替換成數字。

           

           

           

          其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。
          建議優化的時候,加上主鍵和索引,查詢效率會提高。

          通過SQL 查詢分析器,顯示比較:我的結論是:
          分頁方案二:(利用ID大于多少和SELECT TOP分頁)效率最高,需要拼接SQL語句
          分頁方案一:(利用Not In和SELECT TOP分頁)   效率次之,需要拼接SQL語句
          分頁方案三:(利用SQL的游標存儲過程分頁)    效率最差,但是最為通用

           

          posted on 2011-11-21 17:12 強強 閱讀(509) 評論(0)  編輯  收藏 所屬分類: SQLServer


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 广安市| 东乌珠穆沁旗| 虞城县| 酒泉市| 来凤县| 新野县| 寻乌县| 武山县| 成武县| 萨迦县| 清徐县| 瑞安市| 宁晋县| 太仓市| 合江县| 孟州市| 韶山市| 聂荣县| 中卫市| 八宿县| 兰考县| 东明县| 开化县| 绥芬河市| 江山市| 河北区| 得荣县| 宝应县| 灵石县| 宜君县| 永丰县| 永德县| 正定县| 田东县| 色达县| 华亭县| 鸡泽县| 新田县| 蓝山县| 平乐县| 确山县|