表中主鍵必須為標識列,[ID] int IDENTITY (1,1)

            1.分頁方案一:(利用Not In和SELECT TOP分頁)

            語句形式:

          SELECT TOP 10 *
          FROM TestTable
          WHERE(ID NOT IN
               (SELECT TOP 20 id
              FROM TestTable
              ORDER BY id))
          ORDER BY ID
          SELECT TOP 頁大小 *
          FROM TestTable
          WHERE(ID NOT IN
               (SELECT TOP 頁大小 * 頁數 id
              FROM表
              ORDER BY id))
          ORDER BY ID

            2.分頁方案二:(利用ID大于多少和SELECT TOP分頁)

            語句形式:

            SELECT TOP 10 *
          FROM TestTable
          WHERE(ID>
               (SELECT MAX(id)
              FROM(SELECT TOP 20 id
                  FROM TestTable
                  ORDER BY id) AST))
          ORDER BY ID
          SELECT TOP 頁大小 *
          FROM TestTable
          WHERE(ID>
               (SELECT MAX(id)
              FROM(SELECT TOP 頁大小 * 頁數 id
                  FROM 表
                  ORDER BY id) AST))
          ORDER BY ID

            3.分頁方案三:(利用SQL的游標存儲過程分頁)

          create procedureSqlPager
          @sqlstrnvarchar(4000),--查詢字符串
          @currentpageint,--第N頁
          @pagesizeint--每頁行數
          as
          setnocounton
          declare@P1int,--P1是游標的id
          @rowcountint
          execsp_cursoropen@P1output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcountoutput
          selectceiling(1.0*@rowcount/@pagesize)as總頁數--,@rowcountas總行數,@currentpageas當前頁
          set@currentpage=(@currentpage-1)*@pagesize+1
          execsp_cursorfetch@P1,16,@currentpage,@pagesize
          execsp_cursorclose@P1
          setnocountoff

            其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。

            建議優化的時候,加上主鍵和索引,查詢效率會提高。

            通過SQL 查詢分析器,顯示比較:我的結論是:

            分頁方案二:(利用ID大于多少和SELECT TOP分頁)效率最高,需要拼接SQL語句

            分頁方案一:(利用Not In和SELECT TOP分頁) 效率次之,需要拼接SQL語句

            分頁方案三:(利用SQL的游標存儲過程分頁) 效率最差,但是最為通用

          posted on 2008-09-20 15:57 李威威 閱讀(134) 評論(0)  編輯  收藏

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


          網站導航:
           
           
          主站蜘蛛池模板: 治多县| 奇台县| 焦作市| 汶上县| 美姑县| 平武县| 茂名市| 甘德县| 扶沟县| 文山县| 通辽市| 易门县| 海安县| 明溪县| 轮台县| 时尚| 延吉市| 鱼台县| 鹤峰县| 墨竹工卡县| 南木林县| 皮山县| 诸暨市| 朝阳县| 阜南县| 临泉县| 辽宁省| 太原市| 柏乡县| 吐鲁番市| 天全县| 海门市| 互助| 清水县| 凌云县| 明光市| 望城县| 刚察县| 黑河市| 凤阳县| 延川县|