22,206
社区成员
发帖
与我相关
我的任务
分享
SELECT *
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY CREATEDATE DESC) AS rownum,
ID,
NEWSTITLE,
SHORTTITLE
FROM 表名
WHERE (NEWSTYPE = 281)
AND [STATE] = 0
) AS D
WHERE rownum BETWEEN (1 -1) * 25 + 1 AND 1 * 25
--增加索引1
CREATE INDEX IX_表名_NEWSTYPE_STATE on 表名 (NEWSTYPE, STATE) INCLUDE( ID, NEWSTITLE, SHORTTITLE )
--增加索引2
CREATE INDEX IX_表名_CREATEDATE on 表名 (CREATEDATE)
--建议:
--增加一个条件:AND CREATEDATE BETWEEN @d1 and @d2
--当然, 只限制 > 或者 < 也行
--一般来说, 用户关心的只是最近一段时间的数据(比如:3天之内,1周之内,你可以在界面上默认指定一个范围), 其它的数据意义不大
--而以时间字段为条件, 可以很快过滤掉大部分的数据, 效率很高。
SELECT *
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY CREATEDATE DESC) AS rownum,
ID,
NEWSTITLE,
SHORTTITLE
FROM 表名
WHERE (NEWSTYPE = 281)
AND [STATE] = 0
) AS D
WHERE rownum BETWEEN (1 -1) * 25 + 1 AND 1 * 25