Não tem que pedir desculpas de nada, a idéia em um forum é o debate e 
ninguem é dono da verdade. É assim que aprendemos mais a cada nova 
discussão.

Ele sõ usou na segunda query, porque é mais barato. Ele sabe que 
através do índice, ele encontrará poucos registros em relação a 
tabela toda.

No exemplo a proporção do índice era de 25% da tabela, portanto um 
fts é mais barato.

hehehe, permita-me discordar. Se eu tenho uma tabela de 100 milhões 
eu vou considerar o particionamento, daí sim FPS (Full Partition 
Scan) de 1 milhão de registros. 


Então, mas quando voce chega no leaf block 1, temos não só um rowid, 
temos vários. Em uma leitura de 25% do cotingente da tabela, quantas 
vezes acha que vai ler esse mesmo bloco?
Tem um monte de explicação disso na asktom. uma delas é
http://asktom.oracle.com/pls/ask/f?
p=4950:8:::::F4950_P8_DISPLAYID:4433887271030

Acho que voce muda de idéia com a versão 10gr2. Ela está ótima 
(quanto a configuração default). Mas em minha opinião é o voce disse, 
precisa entender o que acontece com o CBO para poder usar 
corretamente. O novo livro do Jonathan Lewis *dizem* está 
espetacular, não tem o que ele não explique.


--- Em oracle_br@yahoogrupos.com.br, falmeida <[EMAIL PROTECTED]> escreveu
> Olá Márcio,
> 
> Antes de mais nada, peço desculpas por te torrar a paciência.
> 
> Realmente me referia ao artigo de ontem - Histograma. E faço alguns
> comensários, a seguir.
> 
> Acho isto no Oracle muito "doido". Eu fiquei desconfiado que quando
> você executasse já utilizando o histograma os selects:
> SQL> select * from t where x_hist = 2;
> ou
> SQL> select * from t where x_hist = 5;
> utilizariam o índice. Só usou na segunda query. .
> 
> Depois, com a criação do bitmap index o resultado foi FTS nas duas 
daí
> quando você força o índice, o custo da que ele fez full e menor da 
que
> ele usou índice.
> 
> Acho isto incongruente, pois imagine se você tivesse não 10 times, 
mas
> sim 100 times, e em cada um tivesse 1.000.000 e em um deles apenas 5
> torcedores. Ora, se eu estivesse acessando um dos times que tem
> 1.000.000 de torcedores, mesmo com o custo de ir no indice e depois 
na
> tabela seria melhor do que percorrer os praticamente 100.000.000
> registros da tabela. Se colocassemos um indice do tipo arvore
> balanceada sobre o campo em questão, ele deveria encontrar 
rapidamente
> pelo ponteiro vertical onde iniciava o primeiro bloco onde a chave
> procurada se encontrava e a partir daí percorreria todos os blocos a
> direita desta árvore até não mais encontrar registros para chave
> procurada. Para cada registro encontrado nesta pesquisa, ele deveria
> acessar via rowid a linha na tabela. Vale lembrar que quando
> computamos a estatistica conseguimos ver a profundidade da árvore do
> índice. 
> Em um DISCO IDE com tempo de acesso médio de 8ms, e uma árvore
> gigantesca com profundidade de 6 (eu particularmente eu nunca vi
> nenhum índice com esta profundidade) observaremos que ele iria
> encontrar o primeiro elemento e 7*8 = 56ms (7 por que temos que
> acessar um bloco raiz). A partir daí é só percorrer blocos a 
direita.
> Isto é extremamente rápido. Depois para cada registro encontrado ir 
no
> bloco apontado pelo rowid. Lembro também que num bloco de índice 
cabem
> inúmeras entradas (ponteiros) e que num bloco de dados vários
> registros. Concluindo, poderiamos aqui fazer uma estimativa de 
quantas
> entradas caberiam nos blocos de índices e depois quantas linhas
> caberiam em um bloco de dados, mas acho que o plano de execução é
> muito ruim nestes casos. Não consigo entender o que o programador da
> Oracle estava pensando quando decidiu fazer o banco trabalhar desta
> forma. Critico sim, pois trabalhei a vida toda com um SO/Linguagem
> chamado MUMPS (hoje tem seu sucessor Caché - que é um banco da 
geração
> pós-relacional) que era super eficiente em termos de busca em 
árvore.
> Hoje concluo que a opção choose como padrão a pior escolha, pois o
> critério que o Oracle escolhe, na minha opinião, é muito
> "preconceituoso", duvidoso e não intuitivo. Hoje, eu deixo o banco 
em
> RULE e analiso o tempo de resposta, e não um suposto custo que eu 
não
> compreendo a lógica de sua apuração.
> 
> Cabe um esclarecimento aqui. Minhas palavras não são para agredir,
> ofender, nem denegrir, ninguém, nem ao produto com o qual venho
> trabalhando e é o meu "ganha pão". Só queria .... entender..... :-p
> 
> Cordialmente e abraços a todos por me aturar e chegar até aqui,
> 
> Fabão.
> 
> Em 24/11/05, Marcio Portes<[EMAIL PROTECTED]> escreveu:
> > Fabão, acredito que voce esteja falando sobre o artigo de ontem
> > (Histograma - introdução).
> >
> > 1) A query que tem um monte de registro vai por FTS. Achei que 
tinha
> >   ficado claro quando executei a primeira query com x_hist = 5 
(sem
> >   histogramas corretos) que fez full table scan. Mesmo assim aqui
> >   está o resultado do autotrace traceonly.
> >
> > SQL> select * from t where x_hist = 2;
> >
> >
> > 1835197 rows selected.
> >
> >
> > Execution Plan
> > ----------------------------------------------------------
> >   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2986 Card=1834400
> > Bytes=45860000)
> >   1    0   TABLE ACCESS (FULL) OF 'T' (Cost=2986 Card=1834400
> > Bytes=45860000)
> >
> >
> >
> >
> > Statistics
> > ----------------------------------------------------------
> >          0  recursive calls
> >          0  db block gets
> >      49556  consistent gets
> >      31045  physical reads
> >        360  redo size
> >   54405784  bytes sent via SQL*Net to client
> >     202512  bytes received via SQL*Net from client
> >      18353  SQL*Net roundtrips to/from client
> >          0  sorts (memory)
> >          0  sorts (disk)
> >    1835197  rows processed
> >
> > SQL> select * from t where x_hist = 5;
> >
> > 10 rows selected.
> >
> >
> > Execution Plan
> > ----------------------------------------------------------
> >   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=1 
Bytes=25)
> >   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'T' (Cost=4 Card=1
> > Bytes=25)
> >   2    1     INDEX (RANGE SCAN) OF 'T_IDX' (NON-UNIQUE) (Cost=3
> > Card=1)
> >
> >
> >
> >
> > Statistics
> > ----------------------------------------------------------
> >          0  recursive calls
> >          0  db block gets
> >          6  consistent gets
> >          0  physical reads
> >          0  redo size
> >        920  bytes sent via SQL*Net to client
> >        651  bytes received via SQL*Net from client
> >          2  SQL*Net roundtrips to/from client
> >          0  sorts (memory)
> >          0  sorts (disk)
> >         10  rows processed
> >
> >
> >
> > 2) Baixa seletividade não é o único argumento para criação de 
bitmap
> >   index. Já imaginou se mesmo com baixa seletividade, o sistema
> >   sofre intensa manutenção? Pra onde vai sua performance? Mas sim,
> >   seria uma alternativa (desde que bem avaliada em seus efeitos
> >   colaterais). no artigo de hoje eu ressalto isso:
> >
> > Pedaço do artigo em
> > <http://mportes.blogspot.com/2005/11/histograma-definio-size.html>
> >   E agora, quando usar histogramas?
> >   Sempre que NÃO exista uniformidade na distribuição de valores
> >   sobre o grupo. Voltando ao exemplo dos torcedores, se em nosso
> >   conjunto não tivéssemos os torcedores do VOCEM, não seria
> >   interessante usar histogramas, porque não ganharíamos nada,
> >   haveria necessidade de estudar melhor os dados e talvez usar
> >   bitmap, cluster, etc. Tudo depende, mas se há distruibuição
> >   ^^^^^^  ^^^^^^^  ^^^
> >   uniforme no grupo ou constante variação de valores distintos, a
> >   coluna não é candidata ao histograma. Outra ocasião onde
> >   deveríamos evitar o histograma é quando a coluna é comparada com
> >   bind variable. De novo o exemplo, se o campo torce_para for
> >   comparado com bind variable, ele não é candidado a histogramas. 
O
> >   otimizador precisa conhecer o valor literal da comparação para
> >   percorrer os buckets(endpoint_number, endpoint_value).
> >
> > 3) Só lembrando que o propósito do artigo foi dar uma introdução 
de
> >   histograma, onde um colega da lista perguntou qual a vantagem de
> >   usá-lo. O artigo foi elaborado para demonstrar a aplicabilidade 
do
> >   histograma.
> >   Mas, vamos a criação do índice e teste.
> >
> > SQL> create bitmap index t_bm on t ( x_hist ) parallel nologging;
> >
> > Index created.
> >
> > SQL> exec dbms_stats.gather_index_stats( user, 'T_BM' )
> >
> > PL/SQL procedure successfully completed.
> >
> > SQL> set autotrace traceonly
> > SQL> select * from t where x_hist = 2;
> >
> > 1835197 rows selected.
> >
> >
> > Execution Plan
> > ----------------------------------------------------------
> >   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2986 Card=1834400
> > Bytes=45860000)
> >   1    0   TABLE ACCESS (FULL) OF 'T' (Cost=2986 Card=1834400
> > Bytes=45860000)
> >
> >
> >
> >
> > Statistics
> > ----------------------------------------------------------
> >          0  recursive calls
> >          0  db block gets
> >      49551  consistent gets
> >      30842  physical reads
> >          0  redo size
> >   54405784  bytes sent via SQL*Net to client
> >     202512  bytes received via SQL*Net from client
> >      18353  SQL*Net roundtrips to/from client
> >          0  sorts (memory)
> >          0  sorts (disk)
> >    1835197  rows processed
> >
> > Deixando o otimizador trabalhar com as estatísticas coletadas ele
> > achou melhor fazer FTS.
> > Mas vamos forçar o índice.
> >
> > SQL> select /*+ index(t, t_bm) */ * from t where x_hist = 2;
> >
> > 1835197 rows selected.
> >
> >
> > Execution Plan
> > ----------------------------------------------------------
> >   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=15420 
Card=1834400
> > Bytes=45860000)
> >   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'T' (Cost=15420
> > Card=1834400 Bytes=45860000)
> >   2    1     BITMAP CONVERSION (TO ROWIDS)
> >   3    2       BITMAP INDEX (SINGLE VALUE) OF 'T_BM'
> >
> >
> >
> >
> > Statistics
> > ----------------------------------------------------------
> >          0  recursive calls
> >          0  db block gets
> >      49475  consistent gets
> >      29340  physical reads
> >         72  redo size
> >   54405784  bytes sent via SQL*Net to client
> >     202512  bytes received via SQL*Net from client
> >      18353  SQL*Net roundtrips to/from client
> >          0  sorts (memory)
> >          0  sorts (disk)
> >    1835197  rows processed
> >
> > Praticamente o mesmo esforço, embora o custo tenha sido maior do
> > índice em relação ao FTS - (Cost=15420) contra (Cost=2986) na 
mesma
> > cardinalidade 1834400. Acho que seria necessário um tkprof aqui 
para
> > análise mais a fundo, mas como o propósito não era investigar 
bitmap
> > index, vou deixar o script que eu usei para fazer o teste e voce 
pode
> > realizá-lo e postar aqui mais tarde.
> >
> > drop table t;
> >
> > create table t nologging as
> > select object_id, object_name, mod(rownum, 4) x_hist
> >  from all_objects
> > /
> > insert /*+ append */ into t
> > select * from t;
> > commit;
> > insert /*+ append */ into t
> > select * from t;
> > commit;
> > insert /*+ append */ into t
> > select * from t;
> > commit;
> > insert /*+ append */ into t
> > select * from t;
> > commit;
> > insert /*+ append */ into t
> > select * from t;
> > commit;
> >
> > update t set x_hist = 5 where rownum <= 10;
> >
> > select x_hist, count(*)
> >  from t
> >  group by rollup(x_hist)
> > /
> >
> > create index t_idx on t (x_hist) parallel 8 nologging;
> >
> > begin
> >  dbms_stats.gather_table_stats(
> >     user,
> >     'T',
> >     estimate_percent => 10,
> >     method_opt => 'for columns x_hist size 10',
> >     cascade => true,
> >     degree => 8 );
> > end;
> > /
> >
> > --- Em oracle_br@yahoogrupos.com.br, falmeida <[EMAIL PROTECTED]> 
escreveu
> > > Ola Marcio,
> > >
> > > Também gostei muito, mas tenho as seguintes perguntas, a saber:
> > >
> > > 1) Você após ter aplicado o 2 metodo de coleta de estatísticas 
você
> > só
> > > rodou a query abaixo:
> > >
> > > select * from t 2   where x_hist = 5
> > >
> > > Não seria legal também demonstrar como ficaria com a query que 
tem
> > um
> > > monte de registros?
> > >
> > > select * from t 2   where x_hist = 4
> > >
> > > 2) Não seria melhor criar um bitmap index, dado que você tem 
baixa
> > > seletividade nesta coluna?
> > >
> > > 3) Já que você tem estes dados na tabela t poderia criar um 
indice
> > > bitmap e mostrar o resultado aqui?
> > >
> > > Desde já agradeço,
> > >
> > > Fabão.
> > >
> > >
> > > Em 24/11/05, Rosiano Vieira de Sales<[EMAIL PROTECTED]> 
escreveu:
> > > > Marcio... dei uma lida no seu blog a respeito e gostei muito 
da
> > nota que vc publicou ....contudo fiquei com uma dúvida ....qual o
> > critério para definir o size do historgrama ??? .... se tiver 
algo a
> > respeito envie para o grupo .. vai ser de muito proveito .....
> > > >
> > > > abç.
> > > >
> > > > Rosiano
> > > >
> > > >        -----Mensagem original-----
> > > >        De: oracle_br@yahoogrupos.com.br em nome de Marcio 
Portes
> > > >        Enviada: qua 23/11/2005 15:06
> > > >        Para: oracle_br@yahoogrupos.com.br
> > > >        Cc:
> > > >        Assunto: [oracle_br] Re: Histogramas.????
> > > >
> > > >
> > > >
> > > >        Welvis, tomei a liberdade de escrever uma pequena
> > introdução para sua
> > > >        dúvida no meu blog.
> > > >        Se interessar:
> > > >        http://mportes.blogspot.com/2005/11/histograma-
> > introduo.html
> > > >
> > > >        abraços,
> > > >
> > > >        --- Em oracle_br@yahoogrupos.com.br, Welvis Douglas 
Silva
> > Moreto
> > > >        <[EMAIL PROTECTED]> escreveu
> > > >        > Quando devo estar utilizando Histogramas.... quais
> > > >        > beneficios terei utilizando o.
> > > >        >
> > > >        >
> > > >        > att,
> > > >        >
> > > >        > Welvis Douglas
> > > >        >
> > > >        >
> > > >        >
> > > >        >
> > > >        >
> > > >        >
> > > >        >
> > > >        >
> > > >        > 
_______________________________________________________
> > > >        > Yahoo! Acesso Grátis: Internet rápida e grátis.
> > > >        > Instale o discador agora!
> > > >        > http://br.acesso.yahoo.com/
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >        -------------------------------------------------------
----
> > ---------------------------------------------------------------
> > > >        Atenção! As mensagens deste grupo são de acesso
> > público e de inteira responsabilidade de seus remetentes.
> > > >        Acesse: http://www.mail-
> > archive.com/oracle_br@yahoogrupos.com.br/
> > > >        -------------------------------------------------------
----
> > ---------------------------------------------------------------
> > 
_____________________________________________________________________
> > > >        Area de download do grupo -
> > http://www.4shared.com/dir/101727/a4dcc423
> > > >        Links do Yahoo! Grupos
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > [As partes desta mensagem que não continham texto foram 
removidas]
> > > >
> > > >
> > > >
> > > > --------------------------------------------------------------
----
> > --------------------------------------------------------
> > > > Atenção! As mensagens deste grupo são de acesso público e de
> > inteira responsabilidade de seus remetentes.
> > > > Acesse: http://www.mail-
archive.com/oracle_br@yahoogrupos.com.br/
> > > > --------------------------------------------------------------
----
> > --------------------------------------------------------
> > 
_____________________________________________________________________
> > > > Area de download do grupo -
> > http://www.4shared.com/dir/101727/a4dcc423
> > > > Links do Yahoo! Grupos
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
> > >
> > > --
> > > Fábio Martinho de Almeida
> > > Niterói-RJ-Brasil
> > >
> > > Visite o fotolog: http://fotolog.net/canon_a300
> >
> >
> >
> >
> > ------------------------------------------------------------------
--------------------------------------------------------
> > Atenção! As mensagens deste grupo são de acesso público e de 
inteira responsabilidade de seus remetentes.
> > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> > ------------------------------------------------------------------
--------------------------------------------------------
_____________________________________________________________________
> > Area de download do grupo - 
http://www.4shared.com/dir/101727/a4dcc423
> > Links do Yahoo! Grupos
> >
> >
> >
> >
> >
> >
> >
> >
> 
> 
> --
> Fábio Martinho de Almeida
> Niterói-RJ-Brasil
> 
> Visite o fotolog: http://fotolog.net/canon_a300




--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------_____________________________________________________________________
Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423  
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