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