風(fēng)人園

          弱水三千,只取一瓢,便能解渴;佛法無邊,奉行一法,便能得益。
          隨筆 - 99, 文章 - 181, 評論 - 56, 引用 - 0
          數(shù)據(jù)加載中……

          最優(yōu)化的ms sql server分頁sql語句(ZT)

          特點(diǎn):一次查詢,數(shù)據(jù)庫只返回一頁的數(shù)據(jù)。而不是取出所有的數(shù)據(jù)。
          說明:

          pagesize: 每頁顯示記錄數(shù)
          cureentpage:當(dāng)前頁數(shù)

          select * from (? select TOP pagesize * FROM ( SELECT TOP pagesize*cureentpage? * from user_table? ORDER BY id ASC ) as aSysTable? ORDER BY id DESC ) as bSysTable? ORDER BY id ASC


          例子說明:

          假如數(shù)據(jù)庫表如下:

          user_table:

          id:主鍵,自增
          username:字符
          password:字符

          假設(shè)有80條記錄,每頁顯示10條記錄,id 從1到80


          現(xiàn)在按照id升序排列取出第三頁的數(shù)據(jù)應(yīng)該為:所取得記錄的id 應(yīng)該為 21到30。

          這時該語句應(yīng)該為:

          select * from (? select TOP 10 * FROM ( SELECT TOP 30? * from user_table? ORDER BY id ASC ) as aSysTable? ORDER BY id DESC ) as bSysTable? ORDER BY id ASC

          原理如下:

          先按照id從小到大升序取出30條記錄(3*10),也就是:id 在 1-30 之間的記錄 (SELECT TOP 30? * from user_table? ORDER BY id ASC)

          然后按照ID降序排列這30條記錄,得到記錄為id 在:從30到 1?

          然后在這些30條記錄中取出前10條記錄:取得的記錄為:id 在30-21之間。這就是我們需要的數(shù)據(jù),但這時是按照降序排列的,不符合要求。

          最后在重新排序得到最終我們需要的數(shù)據(jù)。id在21-30之間。

          posted on 2007-03-19 09:25 風(fēng)人園 閱讀(251) 評論(0)  編輯  收藏 所屬分類: Database

          主站蜘蛛池模板: 大庆市| 桐乡市| 句容市| 怀远县| 五家渠市| 正宁县| 顺昌县| 林州市| 德阳市| 六枝特区| 甘孜| 桐庐县| 邵阳市| 莆田市| 山东省| 建湖县| 长子县| 华坪县| 广宁县| 三门县| 寻甸| 开平市| 永康市| 鹿泉市| 吴川市| 河津市| 汝城县| 天祝| 文成县| 安多县| 临西县| 高唐县| 榕江县| 吴桥县| 绍兴市| 东明县| 武宁县| 顺昌县| 依安县| 涿州市| 普洱|