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