O Chiappa resumiu bem o que penso... DEPENDE... Peformance não tem receita de bolo, o que devemos sempre e colocar as boas práticas, mas também há necessidade de alocar profissionais experientes e comprometidos com a solução.
Para os que precisam de uma query para mostrar as foreign que estão sem índices, segue o script abaixo: -- Gera relatorio em HTML de FK sem indice set echo off set linesize 255 set trims on set trimo on set feedback off set pagesize 0 set arraysize 1 prompt Aguarde a obtencao das FKs sem indices... set termout off spool fknoindex.htm prompt <HTML><HEAD><TITLE>FKs sem Indices</TITLE> prompt <STYLE type="text/css"> select 'h1 {' from dual union all select ' font-family: Verdana, Arial;' from dual union all select ' font-size: 18px;' from dual union all select ' font-weight : bold; ' from dual union all select ' color: silver; ' from dual union all select ' margin: 50px 0px 50px 20px;' from dual union all select ' }' from dual union all select '' from dual union all select '' from dual union all select ' td {' from dual union all select ' font-family: Tahoma, verdana, arial;' from dual union all select ' font-size: 10px;' from dual union all select ' font-weight: normal;' from dual union all select ' }' from dual union all select '' from dual union all select ' th { font-family: verdana, arial;' from dual union all select ' font-size: 10px;' from dual union all select ' font-weight: bold;' from dual union all select ' text-align: left;' from dual union all select ' vertical-align : top;' from dual union all select ' background-color: silver;' from dual union all select ' color: white;' from dual union all select ' }' from dual; prompt </STYLE></HEAD> prompt <BODY> set heading off select '<h1>FKs sem indices (' || name || ') ' || to_char(sysdate,'YYYY.MON.DD HH:MI:SS') || '</h1>' from v$database; prompt <TABLE border="1" cellspacing="0" cellpadding="3"> prompt <TR><TH>Owner pai</TH><TH>Pai</th><th>Owner filha</th><th>Filha</th><th>Nome FK</th><th>Coluna</th></tr> select '<tr><td>' || rc.owner || '</td><td>' || chr(10) || rc.table_name || '</td><td>' || acc.owner || '</td><td>' || chr(10) || acc.table_name || '</td><td>' || acc.constraint_name || '</td><td>' || chr(10) || acc.column_name ||'['||acc.position||']</td></tr>' from dba_constraints rc, dba_cons_columns acc, dba_constraints ac where ac.constraint_name = acc.constraint_name and ac.owner = acc.owner and ac.constraint_type = 'R' and rc.constraint_name = ac.r_constraint_name and rc.owner = ac.r_owner and (acc.owner, acc.table_name, acc.column_name, acc.position) in (select acc.owner, acc.table_name, acc.column_name, acc.position from dba_cons_columns acc, dba_constraints ac where ac.constraint_name = acc.constraint_name and ac.constraint_type = 'R' MINUS select table_owner, table_name, column_name, column_position from dba_ind_columns) order by rc.owner, rc.table_name, acc.owner, acc.table_name, acc.column_name, acc.position; prompt </table></body></html> spool off; set termout on prompt Terminado! Atenciosamente, Sérgio Chaves. Gestão de Serviços de Tecnologia ----- Mensagem original ----- De: "jlchiappa" <jlchia...@yahoo.com.br> : "oracle br" <oracle_br@yahoogrupos.com.br> Enviadas: Sexta-feira, 28 de Setembro de 2012 17:13:27 Assunto: [oracle_br] Re: Índices em todas as FK's de todas as tabelas Bem, se vc precisa argumentos técnicos, veja no manual "Oracle® Database Administrator's Guide" no cap. 16 - Managing Indexes a bem direta Recomendação para se limitar o número de índices, veja a thread classica sobre o assunto http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:292016138754#7860503201204 , e/ou mesmo faça um teste, tracejando ou coletando as sysstats de uma sessão insertando e/ou updateando um grande número de linhas numa tabela sem índice, e depois de outra sessão fazendo o mesmo na mesma tabela mas com 10 índices, vc claramente verá um resultado..... Agora, se vc perguntar "qual a qtdade ideal de índices numa tabela", a resposta só pode ser DEPENDE : isso é Sempre um número de equilíbrio entre performance para queries x overhead para manutenção dos índices em caso de DMLs .... []s Chiappa --- Em oracle_br@yahoogrupos.com.br , Wanderson Barrence <wbarrence@...> escreveu > > Olá Alessandro, Milton e Chiappa, > > Eu até sabia desde o princípio que não é necessário criar índices para > todas as FK's do banco, é que estou tendo sérios problemas de performance > no banco, e o líder dos programadores sugeriu que criássemos índices para > todas as FK's, e estava até agora discutindo que excesso de índices nas > tabelas do banco impacta negativamente na performance do banco!!! > > At, > -- > Wanderson Barrence > DBA Oracle 10g/11g > Analista de Testes - CBTS > ---------------------------------------------------------- > MSN: wbarrence@... > ICQ: 170821994 > Linkedin: http://br.linkedin.com/in/wbarrence > > > > Em 28 de setembro de 2012 14:38, Alessandro Lúcio Cordeiro da Silva < > alecordeirosilva@...> escreveu: > > > ** > > > > > > Olá Wanderson, o Oracle somente obriga a criação de indices em > > Chave Primaria e/ou Chave Unicas. Não é necessário a criação de indices > > para chaves estrangerias. > > > > Contudo, sempre é bom criar indices para FK, mas tabelas mais usada no > > sistema, por dois motivos: > > > > 1- Para melhorar performace em consultas que fazer JOIN entre as tabelas > > em questão. > > 2 - Para Evitar algun LOCK em tabela: Por exemplo o Lock "Enqueue - TM" > > -> > > "index Foreign Keys, Check application locking of tables" mencionado no > > Livro - Oracle DataBase 10G Performance Tuning Tips & Techniques > > > > Trecho do Capiturlo 14: Using STATSPACK and the AWR Report to Tune > > Waits and Latches; no Topico Enqueue: > > > > "When users want to change the exact same record in a block, a TX6 > > lock is the result. Lastly, while you no longer get TM locks, which are > > table locks > > when you don't index foreign keys, be sure to still index them to avoid a > > performance issue" > > > > > > Alessandro Lúcio Cordeiro da Silva > > Analista de Sistema > > þ http://alecordeirosilva.blogspot.com/ > > O tic-tac do relógio me lembra de algo muito importante que esta > > acontecendo: estamos vivos. > > "Joana de Souza Schmitz Croxato" > > > > > > ________________________________ > > De: Wanderson Barrence <wbarrence@...> > > Para: oracle_br@yahoogrupos.com.br > > Enviadas: Sexta-feira, 28 de Setembro de 2012 12:29 > > Assunto: [oracle_br] Índices em todas as FK's de todas as tabelas > > > > > > > > > > Olá Pessoal, > > > > É necessário que todas as tabelas que tenham FK's tenham também índices > > nessas FK's? > > > > At, > > -- > > Wanderson Barrence > > DBA Oracle 10g/11g > > Analista de Testes - CBTS > > ---------------------------------------------------------- > > MSN: wbarrence@... > > ICQ: 170821994 > > Linkedin: http://br.linkedin.com/in/wbarrence > > > > [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]