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语句改为存储过程将会更好
请大家积极参与讨论分页的算法并把好的方案与大家分享