Daniel Robert Costa escreveu:

Pessoal, o histórico da lista não está ficando nada legal ao criarem um
novo assunto (aka thread) respondendo a um e-mail de um outro assunto.
*Por favor*, novo assunto crie um novo e-mail, *não* clique somente no
'Responder' (aka reply). Um bom histórico facilita a busca de assuntos
já discutidos na lista.

>    Preciso de uma ajuda com as classes de operadores!
>    Criei um indice utilizando a classe de operador varchar_pattern_ops, mas
>    nao esta resultando em uma busca indexada, continua trazendo uma busca
>    sequencial.
>     
O uso de índice depende do custo, isto é, se o custo de uma busca
sequencial for menor que uma busca indexada, certamente o planejador irá
sugerir ao executor utilizar a busca sequencial. Sem ver um EXPLAIN fica
difícil dizer porque a sua consulta não usa índices. Um chute é que
talvez sua tabela tenha poucos registros. Você pode também "forçar" o
uso de índices desabilitando (set enable_seqscan to off) o uso de busca
sequencial.
Veja:

regression=# create index foo_idx on foo (b varchar_pattern_ops);
CREATE INDEX
regression=# \d foo
              Tabela "public.foo"
 Coluna |         Tipo          | Modificadores 
--------+-----------------------+---------------
 a      | integer               | 
 b      | character varying(60) | 
Índices:
    "foo_idx" btree (b varchar_pattern_ops)

regression=# select count(*) from foo;
 count 
-------
    66
(1 registro)

regression=# explain select * from foo where b like 'op%';
                     QUERY PLAN                     
----------------------------------------------------
 Seq Scan on foo  (cost=0.00..1.82 rows=1 width=52)
   Filter: ((b)::text ~~ 'op%'::text)
(2 registros)

regression=# set enable_seqscan to off;
SET
regression=# explain select * from foo where b like 'op%';
                                                 QUERY PLAN                     
                            
------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on foo  (cost=4.05..15.73 rows=5 width=52)
   Filter: ((b)::text ~~ 'op%'::text)
   ->  Bitmap Index Scan on foo_idx  (cost=0.00..4.05 rows=5 width=0)
         Index Cond: (((b)::text ~>=~ 'op'::character varying) AND
((b)::text ~<~ 'oq'::character varying))
(4 registros)

regression=# set enable_seqscan to on;
SET
regression=# copy foo (a,b) from '/tmp/h' delimiter as E'\t';
COPY 2178

regression=# select count(*) from foo;
 count 
-------
  2244
(1 registro)

regression=# explain select * from foo where b like 'op%';
                                                 QUERY PLAN                     
                            
------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on foo  (cost=4.07..14.22 rows=7 width=52)
   Filter: ((b)::text ~~ 'op%'::text)
   ->  Bitmap Index Scan on foo_idx  (cost=0.00..4.07 rows=7 width=0)
         Index Cond: (((b)::text ~>=~ 'op'::character varying) AND
((b)::text ~<~ 'oq'::character varying))
(4 registros)


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/

_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a