|
Realmente esqueci do analyse...
Analisei e ele passou a fazer a pesquisa com o
índice.
No entanto, quando rodei a pesquisa diferente, que
pesquisa em dois campos diferentes, na mesma relação, usando OR
select id, razao, fantasia from cliente
WHERE razao like 'AN%' OR fantasia like
'AN%'
Ele disse que usou apenas o índice RAZAO, e que
depois fez um SeqScan. É isso? Eu não entendo o resultado.
Sort (cost=3.91..3.91 rows=1 width=47)
(actual time=0.241..0.249 rows=5 loops=1) Sort
Key: razao -> Seq Scan on cliente
(cost=0.00..3.90 rows=1 width=47) (actual time=0.037..0.134 rows=5
loops=1) Filter: (((razao)::text
~~ 'AN%'::text) OR ((fantasia)::text ~~ 'AN%'::text)) Total runtime: 0.427
ms
Acho que ele deveria ter feito a pesquisa nos dois
índices!
Agora fiz a mesma pesquisa usando UNION, veja o
resultado:
(select id, razao, fantasia from
cliente WHERE razao like 'AN%') UNION (select id, razao,
fantasia from cliente WHERE fantasia like 'n%')
Resultado:
Unique (cost=7.53..7.55 rows=2 width=47)
(actual time=0.274..0.305 rows=5 loops=1) -> Sort
(cost=7.53..7.53 rows=2 width=47) (actual time=0.267..0.275 rows=5
loops=1) Sort Key: id, nome,
fantasia -> Append
(cost=0.00..7.52 rows=2 width=47) (actual time=0.075..0.203 rows=5
loops=1)
-> Seq Scan on atendimentopessoa (cost=0.00..3.75 rows=1
width=47) (actual time=0.069..0.111 rows=4
loops=1)
Filter: ((nome)::text ~~
'P%'::text)
-> Seq Scan on atendimentopessoa (cost=0.00..3.75 rows=1
width=47) (actual time=0.010..0.065 rows=1
loops=1)
Filter: ((fantasia)::text ~~ 'n%'::text) Total runtime: 0.566 ms
Alguém me ajudaria a entender os dois
resultados?
----- Original Message -----
Sent: Monday, October 02, 2006 3:45
PM
Subject: Re: [PostgreSQL-Brasil] Esse SQL
usa índice?
depois de criar o índice vc fez o analyze da
tabela?
Tentou com um explain analyze?
[]'s - Walter
On 10/2/06, Nelson
Pereira Júnior < [EMAIL PROTECTED]>
wrote:
Eu mandei fazer a pesquisa só pela RAZAO
mas ele não usou o índice. Por que isso? Ele deveria usar!
Diminuí a qtd de registros para
1.000
O índice é:
CREATE INDEX "idx_cliente_razao" ON
"public"."cliente" USING btree ("razao");
Quando uso o select:
SELECT id,
nome, fantasia FROM cliente WHERE razao like 'AN%'
Ele me
retorna os registros corretamente, mas não usou o ínidice. Veja o
resultado:
Seq Scan on cliente (cost=0.00..3.75
rows=1 width=136) (actual time=0.047..0.106 rows=3 loops=1) Filter:
((razao)::text ~~ 'AN%'::text)
Alguém sabe o motivo? Ele deveria ter usado o índice!
-----
Original Message -----
Sent:
Monday, October 02, 2006 3:10 PM
Subject:
Re: [PostgreSQL-Brasil] Esse SQL usa índice?
Para esse tanto de resgistros,
eu tenho quase certeza de que o índice não é usado.
[]'s -
Walter
On 10/2/06, Deleon
Galvin <
[EMAIL PROTECTED]> wrote:
Olá
amigo
Execute o Explain que ele vai te dizer se estará utilizando
ou não.
EXPLAIN ANALYZE SELECT id, nome, fantasia FROM cliente
WHERE razao like 'AN%' OR fantasia like 'AN%'
Ali ele irá lhe
fornecer os custos da consulta e também se utilizou um indice (index
scan) e qual indice utilizou ou fez um full scan na tabela (Seq
Scan)
Espero ter ajudado. Um abraço!
Em Seg,
2006-10-02 às 14:37 -0300, Nelson Pereira Júnior escreveu: > Olá
amigos, > > Tenho uma relação com nome CLIENTE. Nela existe
um campo RAZAO e um campo > FANTASIA. Criei 3 índices, um para o
campo razão: idx_cliente_razao, outro > para o fantasia:
idx_cliente_fantasia, e outro com os dois: >
idx_cliente_razao_fantasia > > Imagine que tenho 1 milhão de
registros. > > Quero procurar os cliente que comecem com
"AN", tanto na razão social quanto > no nome fantasia em uma única
pesqusia. > > Queria saber se eu executasse essa pesquisa,
ela usaria os dois índices para > procurar, apenas 1, ou
nenhum: > > SQL: > > SELECT id, nome,
fantasia > FROM cliente > WHERE razao like 'AN%' OR fantasia
like 'AN%' > > Queria saber qual dos índices ela usaria.
> > _______________________________________________ >
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
_______________________________________________ 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
_______________________________________________ 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
_______________________________________________ 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
_______________________________________________ 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
|