这句sql语句能怎么优化,三十多万记录,查询时间要2秒,肯定有问题?

这句sql能怎么优化,三十多万记录,查询时间要2秒,肯定有问题
SELECT * from (SELECT ROW_NUMBER() over(order by ot.IsEnd asc,ot.AddTime desc) as rownum ,em.Id as emId FROM OngoingTask ot ) t
where t.rownum between 120 and 130
其中IsEnd是int类型,0,1,2,3,代表任务状态,IsEnd与AddTime 都添加了索引。

不负相思意
浏览 695回答 5
5回答

繁星淼淼

首先 30w条记录 如果全表查询 就是2秒 这个没有问题(去掉缓存的情况下 因为从硬盘上要读出这么多数据大致要花这么多时间) 其次 如果查询字段是索引 另说   查一下 有没有聚集索引   然后 如果可以 你的排序索引吧 id也加进去 试试  sql的查询 优先查询索引 如果返回值包含索引外的 字段那么会根据 当前索引指定的位置 去读相关记录 

慕田峪9158850

建议看一下执行计划

繁华开满天机

执行计划排序占用了94%,IsEnd字段的聚集索引扫描占了6%,去掉IsEnd字段排序,搜索就非常快,这个字段建立索引好像也没啥用

子衿沉夜

@sujiaya: 如果聚集索引建在AddTime字段上,可以大幅降低排序的开销。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server