Criação de visão materializada incrivelmente lenta ao usar a agregação de strings, alguma sugestão de desempenho?
-
22-09-2019 - |
Pergunta
Eu tenho muitas vistas materializadas, algumas delas levam apenas alguns segundos para criar e atualizar, enquanto outros podem me levar até 40 minutos para compilar, se o Sqldeveloper não travar antes disso.
Eu preciso agregar algumas cordas na minha consulta e tenho a seguinte função
create or replace
function stragg
( input varchar2 )
return varchar2
deterministic
parallel_enable
aggregate using stragg_type
;
Então, no meu MV, uso uma instrução SELECT, como
SELECT
hse.refno,
STRAGG (DISTINCT per.person_name) as PERSONS
FROM
HOUSES hse,
PERSONS per
Isso é ótimo, porque me dá o seguinte:
refno persons
1 Dave, John, Mary
2 Jack, Jill
Ao invés de :
refno persons
1 Dave
1 John
1 Mary
2 Jack
2 Jill
Parece que quando eu uso isso STRAGG
Função, o tempo necessário para criar/atualizar um MV aumenta drasticamente. Existe um método alternativo para obter uma lista de valores separada de vírgula? Eu uso isso em todo o meu MVS, por isso é um recurso bastante necessário para mim
Obrigado
Solução
Existem várias técnicas para agregação de string no link abaixo. Eles podem fornecer melhor desempenho para você.
http://www.oracle-base.com/articles/misc/stringaggregationtechniques.php