使用字符串聚合时,创建物化视图的速度非常慢,有什么性能建议?

问题描述:

我已经加载了物化视图,其中一些只需要几秒钟来创建和刷新,而另一些则可以花费我长达40分钟的时间来编译,如果SQLDeveloper在此之前没有崩溃的话。使用字符串聚合时,创建物化视图的速度非常慢,有什么性能建议?

我需要聚合一些字符串我的查询中,我有以下功能

create or replace 
function stragg 
    (input varchar2) 
    return varchar2 
    deterministic 
    parallel_enable 
    aggregate using stragg_type 
; 

然后,在我的MV我用select语句如

SELECT 
    hse.refno, 
    STRAGG (DISTINCT per.person_name) as PERSONS 
FROM 
HOUSES hse, 
PERSONS per 

这是伟大的,因为它给我以下内容:

refno  persons 
1   Dave, John, Mary 
2   Jack, Jill 

而不是:

refno  persons 
1   Dave 
1   John 
1   Mary 
2   Jack 
2   Jill 

看来,当我使用这个功能时,创建/刷新MV的时间大大增加。是否有一种替代方法来实现逗号分隔的值列表?我用这个在我的MV,因此对我来说是非常必需功能

感谢

+0

你确定这是'stragg'的错吗?查询的计划是什么? – 2010-02-25 00:14:38

在下面的链接有大量的字符串聚合技术。他们可能会为您提供更好的性能。

http://www.oracle-base.com/articles/misc/StringAggregationTechniques.php

+0

感谢您的链接,我已经尝试过'WM_CONCAT',但它比'STRAGG'更慢,但约100%。可能需要尝试一些定制的选项,如上所述 – Jimmy 2010-02-24 14:16:55