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]