为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

不负相思意 2018-12-07 11:07:43
这句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 都添加了索引。
查看完整描述

5 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

首先 30w条记录 如果全表查询 就是2秒 这个没有问题(去掉缓存的情况下 因为从硬盘上要读出这么多数据大致要花这么多时间)

其次 如果查询字段是索引 另说

 

查一下 有没有聚集索引

 

然后 如果可以 你的排序索引吧 id也加进去 试试 

sql的查询 优先查询索引 如果返回值包含索引外的 字段那么会根据 当前索引指定的位置 去读相关记录 

查看完整回答
反对 回复 2019-01-07
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

建议看一下执行计划

查看完整回答
反对 回复 2019-01-07
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-01-07
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

@sujiaya: 如果聚集索引建在AddTime字段上,可以大幅降低排序的开销。

查看完整回答
反对 回复 2019-01-07
  • 5 回答
  • 0 关注
  • 694 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信