select * from
(
select row_number() over(order by Q.id desc) as
rownum,Q.id,channel_id,category_id,title,link_url,img_url,seo_title,seo_keywords,seo_description,[content],sort_id,click,is_lock,[user_id],add_time,author,[from],zhaiyao,is_msg,is_top,is_red,is_hot,is_slide from
dt_article Q
inner join dbo.dt_article_news W
on Q.id=W.id
WHERE channel_id=6 and is_lock=0 and is_top=1
)
AS items
WHERE items.rownum BETWEEN 2 AND 3 order by id desc
我这个SQL是希望冲dt_article表读取指定位置的行数的文章
比如上面的SQL是调取结果集中的第2,3行
我用性能监视发现这种调取方法很耗时,请问有没有替代的方法?
对Where条件的字段做索引。
做了索引速度还是很慢!
您还有其他高招吗?
谢谢
@PKSEO_dudu: 数据量多大啊?这样的语句不应该会很慢啊~
试试 逐个在 channel_id, is_lock and is_top 做索引
一起做个非聚集索引?
@PKSEO_dudu: 你可以先看看执行计划有没有建议
@Yu: 执行计划 怎么看?谢谢!
@PKSEO_dudu:在SQL SERVER 管理器执行图标(向右三角形图标)图标栏上 有个 “显示执行计划”的图标,在执行SQL前,让它显示就行
over 里面不需要排序了,外面已经排序了。用over(select(0))
select * from ( select row_number() over(select(0))) as rownum,Q.id,channel_id,category_id,title,link_url,img_url,seo_title,seo_keywords,seo_description,[content],sort_id,click,is_lock,[user_id],add_time,author,[from],zhaiyao,is_msg,is_top,is_red,is_hot,is_slide from dt_article Q inner join dbo.dt_article_news W on Q.id=W.id WHERE channel_id=6 and is_lock=0 and is_top=1 ) AS items WHERE items.rownum BETWEEN 2 AND 3 order by id desc
over 里面再排序是不是会影响性能?
@PKSEO_dudu: 很影响性能
你试试采用我这种速度是否有提升,验证一下不就好了么