Olá,

2010/1/2 moisespsena <[email protected]>

>
> Boa tarde pessoal!
>
> andei fazendo uns testes com índices no Postgres, e não obtive
> diferença alguma em usar ou não índices. veja:
>
> tabela 1 (tb1):
>
> - idtb1: bigserial PK
> - nome: varchar(20)
>
> tabela 2 (tb2):
>
> - idtb2: bigserial PK
> - idtb1: bigint
> - sobre: varchar(20)
>
> --
> 1 - inseri 30 registros em tb1 e em seguida inseri 600000 registros em
> tb2 com idtb1 = 2;
>
> 2 - Fiz o select abaixo e gastou aprox. 12 segundos:
>      select * from tb2 WHERE idtb1 = 2;
>
> 3 - criei o índice:
>     CREATE INDEX "tb2_idx" ON "public"."tb2"
>     USING BTREE ("idtb1");
>
> 4 - fiz o select (item 2) novamente e gatou também aprox. 12 segundos.
>
> Fiz este mesmo teste mais de 30 vezes, e o resultado foi praticamente
> o mesmo.
>
> Agora a pergunta:
>
> Fiz alguma coisa de errado ou índice que coloquei não serve para nada?
>

Qual o resultado do comando EXPLAIN select * from tb2 WHERE idtb1 = 2;

Qual a versão do seu PostgreSQL?

Você pode colocar aqui a definição da tabela?

Veja o meu exemplo:

Criação da tabela.

postgres=# CREATE TABLE tab1(codigo INTEGER);
CREATE TABLE

Inserção de registros.

postgres=# INSERT INTO tab1 VALUES (generate_series(1,600000));
INSERT 0 600000

postgres=# SELECT count(*) FROM tab1;
 count
--------
 600000
(1 row)

postgres=# SELECT * FROM tab1 WHERE codigo=500;
 codigo
--------
    500
(1 row)

Time: 71,537 ms --Tempo da execução da consulta.

postgres=# postgres=# EXPLAIN SELECT * FROM tab1 WHERE codigo=500;
                       QUERY PLAN
--------------------------------------------------------
 Seq Scan on tab1 (cost=0.00..10155.00 rows=1 width=4)
   Filter: (codigo = 500)
(2 rows)

Time: 0,643 ms --Tempo da execução do comando EXPLAIN.

Adição de uma PK. Ao fazer isso automaticamente um índice será criado.

postgres=# ALTER TABLE tab1 ADD PRIMARY KEY(codigo);
NOTICE:  ALTER TABLE / ADD PRIMARY KEY will create implicit index
"tab1_pkey" for table "tab1"
ALTER TABLE

postgres=# postgres=# SELECT * FROM tab1 WHERE codigo=500;
 codigo
--------
    500
(1 row)

Time: 0,851 ms --Tempo da execução da consulta.

postgres=# EXPLAIN SELECT * FROM tab1 WHERE codigo=500;
                              QUERY PLAN
----------------------------------------------------------------------
 Index Scan using tab1_pkey on tab1  (cost=0.00..8.33 rows=1 width=4)
   Index Cond: (codigo = 500)
(2 rows)

Time: 1,391 ms --Tempo da execução do comando EXPLAIN.

Faça este teste e se o resultado for diferente do apresentado aqui, poste o
seu resultado.


> desde já obrigado.
> --
> View this message in context:
> http://old.nabble.com/%C3%8Dndices-e-otimiza%C3%A7%C3%A3o-tp26994726p26994726.html
> Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>


[]s
-- 
JotaComm
http://jotacomm.wordpress.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a