Rosiano,

Tomei a liberdade de postar para a lista, creio que o assunto ajude mais 
pessoas.

Em resumo, a grosso modo, histogramas são usados em casos em que a 
cardinalidade é muito baixa, ou seja, existem poucos valores distintos para 
tabelas com inumeros registros. 

Para estes casos e, especificamente para casos em que a tabela não sofra muitos 
DMLs, existem também os indices baseados em bitmap (bitmap indexes). Fica 
aberta a discussão na lista, mas em testes feitos aqui, não renderam grandes 
ganhos.

A forma de utilização de histogramas é através da coleta de estatisticas que 
vai ajudar o otimizador nas suas decisões para conseguir o melhor plano de 
execução. No Oracle 8i a coleta é feita pelo comando analyze e no Oracle 9i e 
10g preferencialmente pela package DBMS_STATS.

No manual do Oracle chamado "Database Performance Tuning Guide and Reference" 
vais achar um capitulo chamado "Gathering Optimizer Statistics" (no caso da 
versão 9i) , topico "Using Histograms". Este item fala absolutamente tudo que 
se precisa saber. Tem um vasto material tambem no metalink.

Espero ter ajudado.

Abraço!


-----Mensagem original-----
De: Rosiano Vieira de Sales [mailto:[EMAIL PROTECTED]
Enviada em: sexta-feira, 17 de junho de 2005 14:05
Para: Gari Julio Einsfeldt
Assunto: RES: [oracle_br] Help Consulta Complexa !! Urgente


Gari ...

        Como que funciona o conceito do uso de histogramas ... sempre vejo o 
pessoal trocando esse tipo de informação na lista mas não sei como funciona .. 
qual o conceito ?? como posso utilizar isso ??

Att.

Rosiano

-----Mensagem original-----
De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Gari 
Julio Einsfeldt
Enviada em: sexta-feira, 17 de junho de 2005 13:13
Para: oracle_br@yahoogrupos.com.br
Assunto: RES: [oracle_br] Help Consulta Complexa !! Urgente

Já verificastes a cardinalidade?

Rode esta query:
select TABLE_NAME,COLUMN_NAME,NUM_DISTINCT, NUM_NULLS
from DBA_TAB_COL_STATISTICS
where table_name = upper('&TABLE_NAME')
order by 3 desc;

Quanto maior a coluna NUM_DISTINCT, melhor o campo para ser indexado.

Também considere uma analise mais aprofundada sobre os indices disponiveis nas 
tabelas, talvez existe um outro indice que, se alterada a clausula WHERE, vai 
te ajudar num melhor plano de execução. 

Se isso não resolver, considere o uso de histogramas.

Claro, considerando que as estatisticas estão devidamente coletadas e as 
configurações de banco estão coerentes.


-----Mensagem original-----
De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED]
nome de Rosiano Vieira de Sales
Enviada em: sexta-feira, 17 de junho de 2005 11:53
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Help Consulta Complexa !! Urgente
Prioridade: Alta


Galera,

 

      Tenho uma consulta meio complexa e não estou conseguindo identificar 
porque está fazendo full table scan na tabela

 

tbbidi_contrato pois eu tenho um índice criado na coluna nu_contrato que estou 
usando na clausula where e mesmo assim ele esta fazendo acesso full na tabela 
.... não entendi ... alguém poderia me dar um help ????

 

 

 

SELECT a.dt_mov_contabil, a.dt_transacao, a.dt_captura_transacao, 
a.nu_contrato, 

       a.cd_cond_lt_tarja, a.cd_motivo_ajuste, a.cd_capturadora, 

       a.cd_origem_aut, a.cd_natureza_trans, a.cd_mot_rej_trans, 

       a.cd_entry_mode, a.cd_meio_captura, a.cd_nvl_seg_ecom, 

       a.dt_agenda_pagamento_ro, a.dt_deposito_ro, a.in_offline, 

       a.cd_autorizacao_trans, b.nu_ec, c.cd_parceiro_vendedor, 

       c.cd_produto_visa_vale, d.nu_bin_conta_cartao, count(*) qt, sum(

       vl_transacao) vl_transacao, sum(a.vl_comi_taxa) vl_comi_taxa, sum(

       a.vl_comi_item) vl_comi_item

    FROM tbbimv_transacao a, tbbica_estab_comerc b, tbbidi_contrato c, 

         tbbica_conta_cartao d

    WHERE b.nu_ec = a.nu_ec

      AND c.nu_contrato = a.nu_contrato

      AND d.nu_contrato = a.nu_contrato

      AND a.nu_mes_ref_contabil <= :b1

    GROUP BY a.dt_mov_contabil, a.dt_transacao, a.dt_captura_transacao, 

             a.nu_contrato, a.cd_cond_lt_tarja, a.cd_motivo_ajuste, 

             a.cd_capturadora, a.cd_origem_aut, a.cd_natureza_trans, 

             a.cd_mot_rej_trans, a.cd_entry_mode, a.cd_meio_captura, 

             a.cd_nvl_seg_ecom, a.dt_agenda_pagamento_ro, a.dt_deposito_ro, 

             a.in_offline, a.cd_autorizacao_trans, b.nu_ec, 

             c.cd_parceiro_vendedor, c.cd_produto_visa_vale, 
d.nu_bin_conta_cartao;

 

 

Segue abaixo o plano:

 

----------------------------------------------------------------------------------------------------

 

---------------------------------------------------------------------------------------------------

| Id  | Operation                       |  Name                   | Rows  | 
Bytes |TempSpc| Cost  |

---------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT                |                         |  8077 |   
804K|       | 14729 |

|   1 |  SORT GROUP BY                  |                         |  8077 |   
804K|  1736K| 14729 |

|   2 |   NESTED LOOPS                  |                         |  8077 |   
804K|       | 14576 |

|*  3 |    HASH JOIN                    |                         | 60557 |  
5795K|  2088K| 14576 |

|*  4 |     HASH JOIN                   |                         | 20886 |  
1835K|       |  9299 |

|   5 |      TABLE ACCESS FULL          | TBBIDI_CONTRATO         | 20886 |   
163K|       |   110 |

|   6 |      TABLE ACCESS BY INDEX ROWID| TBBIMV_TRANSACAO        |  1501K|   
117M|       |  6243 |

|*  7 |       INDEX RANGE SCAN          | XAK1TBBIMV_TRANSACAO    |   270K|     
  |       |   696 |

|   8 |     TABLE ACCESS FULL           | TBBICA_CONTA_CARTAO     |  2150K|    
16M|       |  3449 |

|*  9 |    INDEX UNIQUE SCAN            | XPKTBBICA_ESTAB_COMERC  |     1 |     
4 |       |       |

---------------------------------------------------------------------------------------------------

 

Predicate Information (identified by operation id):

---------------------------------------------------

 

   3 - access("D"."NU_CONTRATO"="A"."NU_CONTRATO")

   4 - access("C"."NU_CONTRATO"="A"."NU_CONTRATO")

   7 - access("A"."NU_MES_REF_CONTABIL"<=TO_NUMBER(:Z))

   9 - access("B"."NU_EC"="A"."NU_EC")

             

Att.

 

Rosiano

 



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



______________________________________________________________________

Cancelar assinatura...: [EMAIL PROTECTED]
Moderadores da lista....:Dorian Anderson Soutto [EMAIL PROTECTED] 
Fernanda Damous [EMAIL PROTECTED] 
Alisson Aguiar [EMAIL PROTECTED]
______________________________________________________________________
http://br.groups.yahoo.com/group/oracle_br/ 
______________________________________________________________________

Sair da Lista...: [EMAIL PROTECTED] 
Links do Yahoo! Grupos




 





______________________________________________________________________

Cancelar assinatura...: [EMAIL PROTECTED]
Moderadores da lista....:Dorian Anderson Soutto [EMAIL PROTECTED] 
Fernanda Damous [EMAIL PROTECTED] 
Alisson Aguiar [EMAIL PROTECTED]
______________________________________________________________________
http://br.groups.yahoo.com/group/oracle_br/ 
______________________________________________________________________

Sair da Lista...: [EMAIL PROTECTED] 
Links do Yahoo! Grupos




 





______________________________________________________________________

Cancelar assinatura...: [EMAIL PROTECTED]
Moderadores da lista....:Dorian Anderson Soutto [EMAIL PROTECTED] 
Fernanda Damous [EMAIL PROTECTED] 
Alisson Aguiar [EMAIL PROTECTED]
______________________________________________________________________
http://br.groups.yahoo.com/group/oracle_br/ 
______________________________________________________________________

Sair da Lista...: [EMAIL PROTECTED] 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a