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