SELECT TOP PAGESIZE NEWSTITLE
FORM NEWSINFO WHERE NEWSID NOT IN
(SELECT TOP (PAGE
)* PAGESIZE NEWSID FROM NEWSINFO
WHERE Auditing=
and NEWSBREED=
企業新聞
order by NEWSID DESC)
AND Auditing=
and NEWSBREED=
企業新聞
order by NEWSID DESC
其中
PAGE表示當前頁數
PAGESIZE表示頁的大小
這裡利用了NOT IN
不復合SARG
但總比一次讀取全部的記錄要好的多
符合 SARG的代碼
針對本人的實例還有一個更好的方案
因為NEWSID字段是自增字段
對於NOT IN 語句進行如下的改造
並不影響結果
但速度提高了很多
SELECT TOP PAGESIZE NEWSTITLE
FORM NEWSINFO WHERE NEWSID <
(SELECT MIN(NEWSID) FROM (SELECT TOP (PAGE
) * PAGESIZE NEWSID FROM NEWSINFO WHERE Auditing=
and NEWSBREED=
企業新聞
order by NEWSID DESC) AS TB)AND Auditing=
and NEWSBREED=
企業新聞
order by NEWSID DESC
【說明】
對於在多處使用分頁功能的web 應用程序
把SQL語句改為存儲過程將會更好
請大家積極參與討論分頁的算法
並把好的方案與大家分享
From:http://tw.wingwit.com/Article/program/net/201311/12887.html