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