Olá,

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

>  JotaComm wrote:
>  Qual a versão do seu PostgreSQL?
>
>  Postgres Studio Advanced Server 8.3R2
>
> JotaComm wrote:
>  Você pode colocar aqui a definição da tabela?
>
>
> CREATE TABLE "public"."tb2" (
>   "idtb2" BIGSERIAL,
>   "idtb1" BIGINT NOT NULL,
>   "sobre" VARCHAR(20),
>   CONSTRAINT "tb2_pkey" PRIMARY KEY("idtb2")
> );
>
> CREATE INDEX "tb2_idx" ON "public"."tb2"
>   USING btree ("idtb1");
>
> CREATE TABLE "public"."tb1" (
>   "idtb1" BIGSERIAL,
>   "nome" VARCHAR(20),
>   CONSTRAINT "tb1_pkey" PRIMARY KEY("idtb1")
> );
>
>  JotaComm wrote:
>
> 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.
>
>   Recriei as tabelas e inserir novos registros:
>
>
> -- registros de tb1
> INSERT INTO tb1 (nome) VALUES ('nome_' || generate_series(1,600000));
>
> -- registros de tb2 com idtb1 = 2
> INSERT INTO tb2 (idtb1, sobre) VALUES (2, 'sobre_' || 
> generate_series(1,600000));
>
> -- registros de tb2 com idtb1 = 50
> INSERT INTO tb2 (idtb1, sobre) VALUES (50, 'sobre_' || 
> generate_series(1,600000));
>
> -- contar registros de tb1
> SELECT count(idtb1) FROM tb1;
> > count(idtb1)
> > --------------
> >      600000
> > (1 row)
>
> -- contar registros de tb2
> SELECT count(idtb2) FROM tb2;
> > count(idtb1)
> > --------------
> >      1200000
> > (1 row)
>
>  Executei o VACUM do PGAdmin nas duas tabelas:
>
> *TB1:*
>
> INFO:  vacuuming "public.tb1"INFO:  "tb1": found 0 removable, 600000 
> nonremovable row versions in 3822 pages
> DETAIL:  0 dead row versions cannot be removed yet.
> Nonremovable row versions range from 39 to 44 bytes long.
> There were 0 unused item pointers.
> Total free space (including removable row versions) is 18888 bytes.
> 0 pages are or will become empty, including 0 at the end of the table.
> 1 pages containing 3592 free bytes are potential move destinations.
> CPU 0.09s/0.18u sec elapsed 1.58 sec.
> INFO:  index "tb1_pkey" now contains 600000 row versions in 1648 pages
> DETAIL:  0 index pages have been deleted, 0 are currently reusable.
> CPU 0.00s/0.00u sec elapsed 0.00 sec.
> INFO:  "tb1": moved 0 row versions, truncated 3822 to 3822 pages
> DETAIL:  CPU 0.00s/0.00u sec elapsed 0.00 sec.
> INFO:  analyzing "public.tb1"INFO:  "tb1": scanned 3000 of 3822 pages, 
> containing 470946 live rows and 0 dead rows; 3000 rows in sample, 599985 
> estimated total rowsTempo total de execução da consulta: 1704 ms.
>
>  *TB2:*
>
> INFO:  vacuuming "public.tb2"INFO:  "tb2": found 0 removable, 1200000 
> nonremovable row versions in 8824 pages
> DETAIL:  0 dead row versions cannot be removed yet.
> Nonremovable row versions range from 48 to 53 bytes long.
> There were 0 unused item pointers.
> Total free space (including removable row versions) is 74576 bytes.
> 0 pages are or will become empty, including 0 at the end of the table.
> 1 pages containing 3968 free bytes are potential move destinations.
> CPU 0.23s/0.59u sec elapsed 3.25 sec.INFO:  index "tb2_pkey" now contains 
> 1200000 row versions in 3293 pages
> DETAIL:  0 index pages have been deleted, 0 are currently reusable.
> CPU 0.00s/0.00u sec elapsed 0.00 sec.INFO:  index "tb2_idx" now contains 
> 1200000 row versions in 4172 pages
> DETAIL:  0 index pages have been deleted, 0 are currently reusable.
> CPU 0.01s/0.00u sec elapsed 0.00 sec.
> INFO:  "tb2": moved 0 row versions, truncated 8824 to 8824 pages
> DETAIL:  CPU 0.00s/0.00u sec elapsed 0.00 sec.INFO:  analyzing 
> "public.tb2"INFO:  "tb2": scanned 3000 of 8824 pages, containing 407934 live 
> rows and 0 dead rows; 3000 rows in sample, 1199870 estimated total rowsTempo 
> total de execução da consulta: 3425 ms.
>
>  *Um registro de tb1:*
>
> SELECT * FROM tb1 WHERE idtb1 = 50;
> idtb1 | nome
> --------------
> 50 | nome_50
> (1 row)
>
> Time: 11ms
>
>  *Um registro de tb2:*
>
> SELECT * FROM tb2 WHERE idtb2 = 50;
> idtb2| idtb1 | sobre
> --------------
> 50 | 2 | sobre_50
> (1 row)
>
> Time: 12ms
>
>  *EXPLAIN de tb1:*
>
> EXPLAIN SELECT * FROM tb1 WHERE idtb1 = 500;
>
> QUERY PLAN
> ----------------------------------------------------------------------
>   Index Scan using tb1_pkey on tb1  (cost=0.00..8.33 rows=1 width=19)
>   Index Cond: (idtb1 = 500)
> (2 rows)
>
> Time: 12ms
>
>  *EXPLAIN de tb2:*
>
> EXPLAIN SELECT * FROM tb2 WHERE idtb2 = 500;
>
> QUERY PLAN
> ----------------------------------------------------------------------
>   Index Scan using tb2_pkey on tb2  (cost=0.00..8.40 rows=1 width=28)
>   Index Cond: (idtb2 = 500)
> (2 rows)
>
> Time: 12ms
>
>
> Você percebeu que o tempo de execução é 12 millisegundos e não de 12
segundos?

------------------------------
> View this message in context: Re: Índices e 
> otimização<http://old.nabble.com/%C3%8Dndices-e-otimiza%C3%A7%C3%A3o-tp26994726p26997275.html>
>
> Sent from the PostgreSQL - Brasil mailing list 
> archive<http://old.nabble.com/PostgreSQL---Brasil-f15652.html>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