From: Alvaro Nunes Melo <al_nunes@atua.com.br>
To: PostgreSQL - SQL <pgsql-sql@postgresql.org>
Subject: Similar tables, different indexes performance
Date: Mon, 13 Dec 2004 15:17:49 -0200
Message-ID: <1102958269.5855.29.camel@localhost> (raw)
Hi,
I know that it's not very polite thing re-send a question, but I don't
have any idea about why can this be happening. I have two almost
identical tables, with equivalent indexes, but their performances are
very different. In this case, I'm sending the queries, explains,
tables'structures and record counts. I think this is the place where I
can most probably get help about performance issues.
Thanks in advance,
--
+---------------------------------------------------+
| Alvaro Nunes Melo Atua Sistemas de Informacao |
| al_nunes@atua.com.br www.atua.com.br |
| UIN - 42722678 (54) 327-1044 |
+---------------------------------------------------+
Attachments:mail (text/plain, 5.1K) download
db=> SELECT COUNT(*) FROM titulo WHERE cd_pessoa = 1;
count
-------
220
(1 record)
Time: 48,762 ms
db=> SELECT COUNT(*) FROM movimento WHERE cd_pessoa = 1;
count
-------
221
(1 record)
Time: 1158,463 ms
db=> EXPLAIN ANALYZE SELECT COUNT(*) FROM movimento WHERE cd_pessoa = 1;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=279.99..279.99 rows=1 width=0) (actual time=1.263..1.264 rows=1 loops=1)
-> Index Scan using idx_movimento_cd_pessoa on movimento (cost=0.00..279.80 rows=74 width=0) (actual time=0.043..0.984 rows=221 loops=1)
Index Cond: (cd_pessoa = 1)
Total runtime: 1.388 ms
(4 records)
Time: 6,279 ms
db=> EXPLAIN ANALYZE SELECT COUNT(*) FROM titulo WHERE cd_pessoa = 1;
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=6.02..6.02 rows=1 width=0) (actual time=1.105..1.105 rows=1 loops=1)
-> Index Scan using idx_titulo_cd_pessoa_id_tipo_dt_vencimento on titulo (cost=0.00..6.01 rows=1 width=0)
(actual time=0.040..0.828 rows=220 loops=1)
Index Cond: (cd_pessoa = 1)
Total runtime: 1.209 ms
(4 records)
Time: 6,993 ms
db=> SELECT COUNT(*) FROM movimento;
count
--------
347355
(1 record)
Time: 640,686 ms
db=> SELECT COUNT(*) FROM titulo;
count
--------
347354
(1 record)
Time: 3274,281 ms
db=> \d movimento
Table "public.movimento"
Column | Type | Modifiers
-------------------+---------------+---------------------------------------------------------------------
cd_movimento | integer | not null default nextval('public.movimento_cd_movimento_seq'::text)
cd_pessoa | integer | not null
cd_pessoa_usuario | integer | not null
cd_pessoa_matriz | integer | not null
cd_pessoa_filial | integer | not null
dt_movimento | date | not null
vl_movimento | numeric(15,2) | not null
id_origem | smallint | not null default 0
id_tipo | smallint | not null
nr_nota_fiscal | text |
Índices:
"pk_movimento"chave primária, btree (cd_movimento)
"idx_movimento_cd_pessoa" btree (cd_pessoa)
"idx_movimento_cd_pessoa_id_tipo" btree (cd_pessoa, id_tipo)
Restrições de checagem:
"ckc_id_tipo_moviment" CHECK (id_tipo = 1 OR id_tipo = 2)
"ckc_id_origem_moviment" CHECK (id_origem = 0 OR id_origem = 1 OR id_origem = 2)
Restrições de chave estrangeira:
"fk_movimento_filial" FOREIGN KEY (cd_pessoa_matriz, cd_pessoa_filial) REFERENCES filial(cd_pessoa, cd_pessoa_filial) ON UPDATE RESTRICT ON DELETE RESTRICT
"fk_movimento_usuario" FOREIGN KEY (cd_pessoa_usuario) REFERENCES usuario(cd_pessoa) ON UPDATE RESTRICT ON DELETE RESTRICT
"fk_movimento_pessoa" FOREIGN KEY (cd_pessoa) REFERENCES pessoa(cd_pessoa) ON UPDATE RESTRICT ON DELETE RESTRICT
db=> \d titulo
Table "public.titulo"
Column | Type | Modifiers
----------------+---------------+---------------------------------------------------------------
cd_titulo | integer | not null default nextval('public.titulo_cd_titulo_seq'::text)
cd_portador | integer |
cd_movimento | integer | not null
nr_lote | integer |
cd_lote_titulo | integer |
vl_titulo | numeric(15,2) | not null
vl_acrescimo | numeric(15,2) |
vl_desconto | numeric(15,2) |
vl_multa | numeric(15,2) |
vl_juro | numeric(15,2) |
vl_emolumento | numeric(15,2) |
vl_pago | numeric(15,2) |
dt_vencimento | date | not null
ds_observacao | text |
nr_banco | text |
dt_quitacao | date |
id_tipo | smallint |
cd_pessoa | integer |
Índices:
"pk_titulo"chave primária, btree (cd_titulo)
"idx_titulo_cd_movimento" btree (cd_movimento)
"idx_titulo_cd_pessoa_id_tipo_dt_vencimento" btree (cd_pessoa, id_tipo, dt_vencimento)
"idx_titulo_nr_lote" btree (nr_lote)
Restrições de chave estrangeira:
"fk_titulo_pessoa" FOREIGN KEY (cd_pessoa) REFERENCES pessoa(cd_pessoa)
"fk_titulo_lote" FOREIGN KEY (nr_lote) REFERENCES lote(nr_lote) ON UPDATE RESTRICT ON DELETE RESTRICT
"fk_titulo_portador" FOREIGN KEY (cd_portador) REFERENCES portador(cd_portador) ON UPDATE RESTRICT ON DELETE RESTRICT
"fk_titulo_lote_titulo" FOREIGN KEY (cd_lote_titulo) REFERENCES lote_titulo(cd_lote_titulo) ON UPDATE RESTRICT ON DELETE RESTRICT
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-sql@postgresql.org
Cc: al_nunes@atua.com.br
Subject: Re: Similar tables, different indexes performance
In-Reply-To: <1102958269.5855.29.camel@localhost>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox