Criando uma tabela / visualização nivelada de um conjunto de dados definido hierarquicamente

Eu tenho uma tabela contendo dados hierárquicos. Atualmente, existem ~ 8 níveis nesta hierarquia.

Gosto muito da maneira como os dados são estruturados, mas o desempenho é sombrio quando preciso saber se um registro no nível 8 é filho de um registro no nível 1.

Tenho funções armazenadas PL / SQL que fazem essas pesquisas para mim, cada uma com umaselect * from tbl start with ... connect by... declaração. Isso funciona bem quando estou consultando um punhado de registros, mas agora estou em uma situação em que preciso consultar ~ 10k registros de uma vez e para cada um deles executar esta função. Demora de 2 a 3 minutos para que eu execute em apenas alguns segundos.

Usando algumas heurísticas baseadas no meu conhecimento dos dados atuais, posso me livrar da função de pesquisa e fazer issochildrecord.key || '%' LIKE parentrecord.key mas esse é um truque muito sujo e nem sempre funciona.

Então agora estou pensando que, para esta tabela definida hierarquicamente, preciso ter uma tabela pai-filho separada, que conterá todos os relacionamentos ... para uma hierarquia que vá do nível 1-8, haveria 8! registros, associando 1 com 2, 1 com 3, ..., 1 com 8 e 2 com 3, 2 com 4, ..., 2 com 8. E assim por diante.

Meu pensamento é que eu precisaria ter um gatilho de inserção onde basicamente executará oconnect by consulta e para cada correspondência subindo na hierarquia, ele inserirá um registro na tabela de pesquisa. E para lidar com dados antigos, configurarei chaves estrangeiras na tabela principal com exclusões em cascata.

Existem opções melhores que essa? Estou perdendo outra maneira de determinar mais rapidamente esses relacionamentos distantes entre ancestrais e descendentes?

EDITAR: Parece ser exatamente o que estou pensando:http://evolt.org/working_with_hierarchical_data_in_sql_using_ancestor_tables

questionAnswers(1)

yourAnswerToTheQuestion