一般情况下没错,但是最好把"="改成
"in"。
为什麽呢?因为你不能保证
(select
top
1
h.fid
from
h
where
h.time>’2012-10-29
00:00:00’
group
by
h.fid
order
by
count
(h.fid)
desc
)的结果只有一个值,举个例子:有两个帖子都回覆了10次,其他帖子都在10次以下,这时候你的这个子查询的结果是两个h.fid,也就是那两个回覆10次的(并列第一),而不是一个!
SQL本身没有问题,数据量也没有太夸张,全是内连接也不构成问题,真正影响执行性能的是IN和NOT IN,特别是最后的NOT IN,随着数据量增加,执行效率直线下降。优化方法就是少用IN和NOT IN。
其他地方没办法优化
最后一句改为内连接
INNER JOIN (SELECT vbeln FROM yvbrk WHERE bukrs =
p_bukrs AND gsber = p_gsber) a on v~vbeln<>a.vbeln
曾看过原来数据库语法优化说连接比not in效率高很多。所以你可以试下
3楼正解
建视图