Chiappa, 
Tudo bem em relação aos locks.
Mas e quanto as consultas onde é necessário o join das tabelas PAIS com as
tabelas FILHOS?
Não acha que esta pode ser uma justificativa em relação a criação de índices
nas foreign keys?
Vejo como algo natural a necessidade de se fazer com certa frequência o join
das tabelas PAIS com tabelas FILHOS, pelo menos num banco que não seja DW.
Até mais.
 
  _____  

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de jlchiappa
Enviada em: quarta-feira, 30 de janeiro de 2008 08:08
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Re: Criação de Índices em Chaves Estrangeiras



Adriano, eu vi em outras mgs que o pessoal já te proveu os links com
demonstrações, então vou falar só do conceito geral, que é ** muito **
simples : veja vc, uma coluna FK significa que o valor dela deve ser
chacedo contra uma outra tabela , e essa outra tabela TEM que ter uma
Pk ou UK presente, ok ? Muito bem, se tem PK ou UK, necessariamente
tem índice lá na outra tabela, certo ? Se há índice, para cada
registro na tabela-filha (que posui K) que vc inserir/alterar o valor
da coluna será pesquisado na tabela-pai, já que vc sabe que na pai
necessariamente vc tem índice é natural que esse índice seja usado, ok
? Não faz portanto o ** MENOR ** sentido vc indexar a coluna FK nesse
caso, o índice a ser usado é o que já existe na coluna PK/UK, a
própria constraint PK/UK exige a presença de índice, sim ?
Agora, imagine que vc vá fazer UPDATE/DELETE num registro da
tabela-pai nessa coluna PK/UK : claro, se vc levar à ferro e fogo a
teoria de bd relacional, ela sustenta que a chave *** nunca ***
deveria mudar, se está mudando não é chave, mas suponha que vc precise
fazer isso - nesse caso, lógico, o valor alterado TEM QUE ser
pesquisado na tabela-filha pra se checar se existe, aí sim se nõ
houver índice na tabela-filha por essa coluna FK não tem jeito, a
tabela terá que ser scaneada POR INTEIRO, e (claro) para evitar
alterações enquanto isso, a tabela é lockada também... Então é isso,
SE e APENAS SE vc o banco for ter que fazer pesquisa na coluna FK da
tabela-filha devido à alteração de chave, aí SIM vc precisa de índice
na FK. E sim, vc estava 100% correto ao supor que cada índice (não
importa aonde seja) adiciona overhead para DMLs (e em menor grau até
pra DDLs, principalmente TRUNCATEs e quetais), então SIM, vc tem que
pesar direitinho isso, e NUNCA, JAMAIS, sair simplesmente indexando
alegremente tudo que é FK, ok ? Aqui no cliente atual o pessoal usou
uma tool de modelagem que já sai criando automticamente índice pra
TUDO que é FK, grande parte do meu trabalho de tuning aqui é
simplesmente DROPAR essas coisas, EM ESPECIAL porque aqui é DW, a
chave PK/Uk normalmente é sintética , é um NÚMERO "inventado"
sequencial, normalmente não vejo razão ALGUMA de negócio pra essa
chave ser alterada, então nenhum sentido em indexar FKs aqui.

[]s

Chiappa
--- Em [EMAIL PROTECTED] <mailto:oracle_br%40yahoogrupos.com.br>
os.com.br, "Adriano de Oliveira"
<[EMAIL PROTECTED]> escreveu
>
> Pois é.
> Também li sobre os locks que podem acontecer em um delete cascade
por exemplo em uma tabela child
> onde a chave estrangeira não possui indice.
> Eu crio a estrutura do meu BD no ErWin, e ele cria por default os
indices pra todas as foreign keys.
> Mas eu tenho como escolher qual eu devo criar no banco propriamente
dito.
> Acredito que a gente deve analisar direito e decidir até que ponto
esse índice vai ajudar ou atrapalhar 
> o sistema em si.
> Mas não sei a opinião de Certificados Oracle sobre isso..
> 
> []'s
> Adriano
> 
> ----- Original Message ----- 
> From: Welvis Douglas 
> To: [EMAIL PROTECTED] <mailto:oracle_br%40yahoogrupos.com.br> os.com.br 
> Sent: Tuesday, January 29, 2008 2:48 PM
> Subject: Re: [oracle_br] Criação de Índices em Chaves Estrangeiras
> 
> 
> Então, aqui na empresa estou assumindo o lugar de outro dba.. ai
quando fui fazer uma manuteção com a supervisão dele.. estava para
criar uma indice para FK, ai perguntei para ele... e ele disse que
isso tbm não precisa mais... 
> 
> bom resumindo, 4 pessoas que conheço DBA's falaram que é mito,
porem aqui onde eu trabalho eles tem essa cultura...
> 
> sacou, 
> 
> eu tenho tabela aqui com mais de 20GB, um indice desse deve ser
bem grandinho.. né...
> 
> poderia diminurir um certo espaço.. , mas como é um problema
cultural...
> 
> fazer o que.. kk
> 
> abraço
> 
> ----- Original Message ----- 
> From: Andre Santos 
> To: [EMAIL PROTECTED] <mailto:oracle_br%40yahoogrupos.com.br> os.com.br 
> Sent: Tuesday, January 29, 2008 3:18 PM
> Subject: Re: [oracle_br] Criação de Índices em Chaves Estrangeiras
> 
> Welvis
> 
> Será que é mito mesmo?
> Já li algumas coisas referentes a "lock" para verificação de
integridade
> referencial, que seria melhor caso houvesse um índice na FK.
> 
> Precisaríamos verificar... vou tentar pesquisar algo a respeito.
> 
> De qualquer forma, o que o Adriano mencionou sobre o maior custo
num INSERT
> com 10 índices é verdade.
> Pessoalmente, acho que é melhor analisar os casos em que seria
melhor ter um
> índice (e não criá-los indiscriminadamente para todas as FK's).
> 
> [ ]'s
> 
> André
> 
> Em 29/01/08, Welvis Douglas <[EMAIL PROTECTED]> escreveu:
> >
> > Meu amigo, quando eu fiz o curso do 10g em 2005, a pessoa que deu o
> > curso disse que esse era um mido to oracle 8.
> >
> > ...
> >
> > att,
> >
> > Welvis Douglas
> >
> > ----- Original Message -----
> > From: Adriano de Oliveira
> > To: [EMAIL PROTECTED] <mailto:oracle_br%40yahoogrupos.com.br>
os.com.br <oracle_br%40yahoogrupos.com.br>
> > Sent: Tuesday, January 29, 2008 11:05 AM
> > Subject: [oracle_br] Criação de Índices em Chaves Estrangeiras
> >
> > Olá pessoal, bom dia.
> >
> > Sei que a criação de índices em chaves estrangeiras é indicada
> > para se ter uma boa performance no banco.
> > Mas deve-se criar para todas as chaves estrangeiras ou tem que
> > se ter uma análise delas e escolher as chaves mais consultadas, etc?
> >
> > Por exemplo, se eu tiver uma tabela com 10 chaves estrangeiras
> > (hipoteticamente),
> > se eu criar um índice para cada chave estrangeira, pode ser que
o select
> > se torne rápido, porém um insert, ou update vai ficar mais lento
pela
> > atualização
> > dos 10 índices.
> >
> > Qual a opinião de vcs?
> >
> > []'s
> > Adriano
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> > 
> >
> 
> [As partes desta mensagem que não continham texto foram removidas]
> 
> [As partes desta mensagem que não continham texto foram removidas]
> 
> 
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>



 



[As partes desta mensagem que não continham texto foram removidas]

Responder a