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]

Responder a