求助!!!嵌套查询中父查询加条件了is not null变慢的原因

freetd 2010-05-27 11:58:07
先有如下语句:

--语句一
select b,max(sum) as 'max' from (
select a,b,sum(c)as 'sum' group by a,b
) as a group by b --这条语句的查询速度正常

--语句二
select b,max(sum) as 'max' from (
select a,b,sum(c)as 'sum' group by a,b
) as a where b is not null group by b --这条语句的查询速度不正常,会很慢,查询的时间是上一条的10倍多

--select b,max(sum) as 'max' from (
-- select a,b,sum(c)as 'sum' group by a,b
--) as a group by b having b is not null --这句的速度也一样很慢,跟句二没区别

--语句三
select b,max from (
select b,max(sum) as 'max' from (
select a,b,sum(c)as 'sum' group by a,b
) as a group by b
) as c where b is not null --这条跟句二的速度一样

--语句四:
select * into #temp from (
select b,max(sum) as 'max' from (
select a,b,sum(c)as 'sum' group by a,b
) as a group by b
) as c
select * from #temp where b is not null --先把结果插入到临时表再用条件is not null 的总查询速度只比第一种查询速度慢一秒


说明:
表中是没有索引的
  
--这语句得到的记录数有1096条
select a,b,sum(c)as 'sum' group by a,b

--这语句查询到的记录数只有四十多条,b为null的记录只有一条
select b,max(sum) as 'max' from (
select a,b,sum(c)as 'sum' group by a,b
) as a group by b

为什么在句二和句三中加了is not null条件的查询速度会变那么多慢
...全文
422 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
freetd 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fredrickhu 的回复:]

可以把子查询放入临时表 那样的话处理速度会快些 具体的可以参考执行计划
[/Quote]
这个方法在上面也提到,的确是快很多,但是我发这个帖的目的是要了解为什么父查询加了条件is not null 就会变得那么慢
--小F-- 2010-06-01
  • 打赏
  • 举报
回复
可以把子查询放入临时表 那样的话处理速度会快些 具体的可以参考执行计划
freetd 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jaydom 的回复:]

is not null要遍历所有的数据,如果你的数据量大的话自然很慢了
[/Quote]

但是is not null 这个条件我是写在父查询那里,而且父查询查询的对象是子查询,子查询的结果我也提到了,为null的记录数只有一条,同时子查询才是面向实际表的,我都没有设置条件,按道理不应该会慢那么多的
freetd 2010-05-27
  • 打赏
  • 举报
回复
有没有人知道原因?是不是条件只是对实际表中的b列进行过滤而不是对嵌套里的查询结果中b进行过滤
jaydom 2010-05-27
  • 打赏
  • 举报
回复 1
is not null要遍历所有的数据,如果你的数据量大的话自然很慢了
freetd 2010-05-27
  • 打赏
  • 举报
回复
一个下午下来一个回复的人都没有,郁闷阿

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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