我有一个SQL语句:
select
t3.item1,
t3.item2,
sum(t1.moneys)
from
table t1
inner join table t2 on t1.key = t2.key
inner join table t3 on t1.key2 = t3.key2
where
t2.type = 'thistype'
and t3.type2 = 'thistype'
group by
t3.item1, t3.item2
如果我删除了group by
,sum
或where
条款,它运行正常 - 但如果我将其中的任何一个添加回来,它会永远挂起......任何想法......这个在SQL Server Management Studio 2008 R2上
由于
进一步测试
所以我创建了一个视图:
select
t3.item1,
t3.item2,
t1.moneys,
t2.type,
t3.type2
from
table t1
inner join table t2 on t1.key = t2.key
inner join table t3 on t1.key2 = t3.key2
我可以从视图中选择前1000并查看我想在数据中专门查看的类型,但是当我添加'where type2 ='thistype''时它会再次挂起......
答案 0 :(得分:1)
我认为在得到一个可靠的答案之前,我们需要查看一些表结构并了解有关您的数据库的更多信息。但首先,要对其进行跟踪并查看它告诉您的内容。
乍一看,我发现聚合函数(求和,分组等)的问题往往源于a)过大的数据集(即:你只是试图回收过多的数据)或b)来自过于复杂的结构或连接表上的关系。
然而,这些只是我的一般经验法则,可能不适用于特定情况:运行跟踪和任何其他形式的分析,您可以看到它告诉您的内容。
答案 1 :(得分:1)
你加入三张桌子和数百万条记录,这是正常的,需要花一点时间才能运行。
要回答有关统计信息的问题,它们就是索引用于从表中更快地检索记录的内容。如果没有准确或最新的统计数据,索引实际上可能会减慢您的查询速度。
http://blogs.technet.com/b/rob/archive/2008/05/16/sql-server-statistics.aspx
答案 2 :(得分:0)
你看过你得到的执行计划了吗?这会告诉你问题出在哪里。您是否在要加入和分组的列上有覆盖索引?
答案 3 :(得分:0)
执行计划是否可能已损坏? http://msdn.microsoft.com/en-us/library/aa175244(v=sql.80).aspx
尝试使用sp_recompile