yxhxj2006

          常用鏈接

          統(tǒng)計

          最新評論

          SQL分頁語句

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

          方法1:
          適用于 SQL Server 2000/2005
          SELECT TOP 頁大小 *
          FROM table1
          WHERE id NOT IN
                    (
                    
          SELECT TOP 頁大小*(數(shù)排序-1) id FROM table1 ORDER BY id
                    )
          ORDER BY id
          原理:其中id最好是主鍵或者索引,這樣查詢速度比較快)。由頁碼數(shù),通過sELECT TOP 頁大小*(頁數(shù)排序-1) id FROM tablename ORDER BY id 獲取最前面的那幾行(top),然后通過id not in 表示要查詢的那一頁是最后的那一部分,而通過top +頁大小表示去最后那一部分記錄的最前面的那幾天記錄(每頁記錄數(shù))。
          為什么直接取最后那一部分的,因為sql只有去前面幾條記錄top,而沒有去最后幾條記錄的關(guān)鍵字。
          方法2:
          適用于 SQL Server 2000/2005
          --順序?qū)懛ǎ?br /> SELECT TOP 頁大小 *
           FROM table1
           WHERE id >=
           (
           SELECT ISNULL(MAX(id),0) 
           FROM 
           (
           SELECT TOP 頁大小*(頁數(shù)-1)+1 id FROM table1 ORDER BY id
           ) A
           )
           ORDER BY id
           
           --降序?qū)懛ǎ?br /> SELECT TOP 頁大小 *
           FROM table1
           WHERE id <=
           (
           SELECT ISNULL(MIN(id),0) 
           FROM 
           (
           SELECT TOP 頁大小*(頁數(shù)-1)+1 id FROM table1 ORDER BY id Desc
           ) A
           )
           ORDER BY id Desc

          方法3:
          適用于 SQL Server 2005

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


          說明,頁大小:每頁的行數(shù);頁數(shù):第幾頁。使用時,請把“頁大小”和“頁大小*(頁數(shù)-1)”替換成數(shù)字。

           

           

           

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

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

          posted on 2012-08-29 18:36 奮斗成就男人 閱讀(480) 評論(0)  編輯  收藏 所屬分類: SQL

          主站蜘蛛池模板: 扎兰屯市| 拜城县| 苍溪县| 古交市| 新平| 合川市| 安吉县| 疏勒县| 海盐县| 县级市| 买车| 牙克石市| 耒阳市| 姚安县| 余庆县| 黔江区| 山东省| 桦川县| 阿勒泰市| 航空| 潞西市| 高青县| 高雄市| 小金县| 苍山县| 平山县| 米林县| 高青县| 高尔夫| 上栗县| 合川市| 张北县| 青田县| 丁青县| 望江县| 柘城县| 西昌市| 剑川县| 酒泉市| 博野县| 朝阳区|