Fala pessoal
To com a seguinte dúvida...tenho um banco com diversas tabelas com caracteristicas iguais. Supondo que eu tenha um select igual e tenha que fazê-lo nas várias tabelas, seria mais viável (em questões de desempenho) ter uma tabela que guardasse a informação de todas com um campo de identificacao diferenciado as informacoes? E, tendo essa tabela, compensaria em caso de o select ser so para uma das tabelas anteriores?
obrigado!
Desempenho Acesso Diversas tabelas
-
- Rank: Estagiário Sênior
- Mensagens: 8
- Registrado em: Qua, 10 Jun 2009 5:38 pm
- Localização: São carlos - SP
-
- Rank: Analista Sênior
- Mensagens: 130
- Registrado em: Seg, 22 Nov 2004 1:45 pm
- Localização: Niterói - RJ
Gustavo Erthal Jr. | TRISCAL
...................................................
Rio de Janeiro | (21) 2507-2010
São Paulo | (11) 3167-0526
www.triscal.com.br
...................................................
Rio de Janeiro | (21) 2507-2010
São Paulo | (11) 3167-0526
www.triscal.com.br
Xico,
Se essa query que une várias tabelas for rodar mais de uma vez com filtros diferentes, você pode criar uma materialized view (MV) com os dados de todas as tabelas, mas sem aplicar filtros, que serão adicionados quando for feito um select sobre essa MV.
O problema de performance com muitas tabelas, é que quanto mais joins pior será o desempenho.
Você tem que considerar se vale a pena criar uma MV com os registros de todas as outras tabelas, e quando essa MV deverá sofrer um refresh, medindo, inclusive o tempo que esse refresh levará.
Faça alguns testes. Crie a MV medindo o tempo que o Oracle levará para criá-la e carregá-la. Depois faça uma query sobre essa MV, aplicando os filtros que são utilizados com frequência.
Depois rode a query que alimenta a MV, mas desta vez aplique filtros. Mas não repita os mesmos filtros da query feita sobre a MV para que o Oracle não utilize os dados na existentes nas áreas de memória. Se você utilizar os mesmos filtros o resultado será mascarado porque o Oracle não irá "buscar" os dados nos blocos do Sistema Operacional (SO), e sim o que já está nas áreas de memória.
Qualquer dúvida estou à disposição.
Abraços,
Se essa query que une várias tabelas for rodar mais de uma vez com filtros diferentes, você pode criar uma materialized view (MV) com os dados de todas as tabelas, mas sem aplicar filtros, que serão adicionados quando for feito um select sobre essa MV.
O problema de performance com muitas tabelas, é que quanto mais joins pior será o desempenho.
Você tem que considerar se vale a pena criar uma MV com os registros de todas as outras tabelas, e quando essa MV deverá sofrer um refresh, medindo, inclusive o tempo que esse refresh levará.
Faça alguns testes. Crie a MV medindo o tempo que o Oracle levará para criá-la e carregá-la. Depois faça uma query sobre essa MV, aplicando os filtros que são utilizados com frequência.
Depois rode a query que alimenta a MV, mas desta vez aplique filtros. Mas não repita os mesmos filtros da query feita sobre a MV para que o Oracle não utilize os dados na existentes nas áreas de memória. Se você utilizar os mesmos filtros o resultado será mascarado porque o Oracle não irá "buscar" os dados nos blocos do Sistema Operacional (SO), e sim o que já está nas áreas de memória.
Qualquer dúvida estou à disposição.
Abraços,
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes