Sybase专家帮助:groupby聚合性能问题
嘿我有以下表和SQL:
T1:ID,col2,col3-PK(ID) - 23mil行
T2:ID,col2,col3-PK(ID) - 23mil行
T3:ID,名称,值 - PK(ID,名称)-66mil行
1)下面的sql非常快速地返回10k行结果集,没有问题。
select top 10000 T1.col2, T2.col2, T3.name, T4.value
from T1, T2, T3
where T1.ID = T2.ID and T1.ID *= T3.ID and T3.name in ('ABC','XYZ')
and T2.col1 = 'SOMEVALUE'
2)下面的sql取得了FOREVER。
select top 10000 T1.col2, T2.col2,
ABC = min(case when T3.name='ABC ' then T3.value end)
XYZ = min(case when T3.name='XYZ ' then T3.value end)
from T1, T2, T3
where T1.ID = T2.ID and T1.ID *= T3.ID and T3.name in ('ABC','XYZ')
and T2.col1 = 'SOMEVALUE'
group by T1.col2, T2.col2,
这两个查询之间showplan的唯一区别在于查询2)。我不理解它100%,它是否在临时表中选择了没有前10000的整个结果集,然后在它上面进行分组?这就是为什么它慢?
STEP 1
The type of query is SELECT (into Worktable1).
GROUP BY
Evaluate Grouped MINIMUM AGGREGATE.
FROM TABLE ...etc..
TO TABLE
Worktable1.
STEP 2
The type of query is SELECT.
FROM TABLE
Worktable1.
Nested iteration.
Table Scan.
Forward scan.
Positioning at start of table.
Using I/O Size 16 Kbytes for data pages.
With MRU Buffer Replacement Strategy for data pages.
我的问题是
1)为什么查询2)这么慢
2)如何在保持查询逻辑相同的情况下进行修复,并且最好将其限制为仅像以前一样选择SQL。
谢谢
没有找到相关结果
已邀请:
1 个回复
膏焦凑