遇到一个查询语句速度慢,帮忙看看怎么优化一下!

heochuan 2016-12-23 03:55:49
下面是一个sqlserver查询语句,现在反映有点慢,大约得3秒能出结果。各位看看是写法有问题吗?需要怎么优化?
TB_data是数据表,现在我的目的是带条件和排序的分页查询,

现在表里是按照 年度、保存时间、部门、序号,升序排序的。
要查看 2015年、永久、技术部的这一部门数据,目前每页显示100条,
"sys_删除"是一个真假删除标识,是sql里条件太多了吗?
第一页显示的很快,也就是top值是0的时候,翻页就很慢了,下面的sql就是第二页输出的语句,在数据库里运行也得3秒能出来。

select top 100 * from TB_data where (id not in(select top 100 id from TB_data where "sys_删除" is null and("年度"='2015' and "保存时间"='永久' and "部门"='技术部' )order by "年度","保存时间","部门","序号")) and "sys_删除" is null and("年度"='2015' and "保存时间"='永久' and "部门"='技术部' )order by "年度","保存时间","部门","序号"
...全文
352 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
heochuan 2016-12-26
  • 打赏
  • 举报
回复
引用 4 楼 weixin_34783968 的回复:
还有就是where条件里面的字段加个联合索引
我是新手,联合索引怎么用?不用 not in那怎么办? 就这个sql你能给我写个例子 怎么改进一下吗? 谢谢大神拉!!!
heochuan 2016-12-26
  • 打赏
  • 举报
回复
引用 3 楼 weixin_34783968 的回复:
避免使用not in,这会使查询很慢
恩 我没用索引 就是not in的问题,not in 效率太慢了,2万的数据就得2秒(带条件和排序) 我换了row_number() over的写法 速度快多了 100万的数据3秒就出来了,要用not in得15秒~20秒
weare微儿 2016-12-23
  • 打赏
  • 举报
回复
还有就是where条件里面的字段加个联合索引
weare微儿 2016-12-23
  • 打赏
  • 举报
回复
避免使用not in,这会使查询很慢
soton_dolphin 2016-12-23
  • 打赏
  • 举报
回复
你的表添加索引了吗?
conanju_pc 2016-12-23
  • 打赏
  • 举报
回复
能不能贴原来的sql语句

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧