From: | Edwin Quijada <listas_quijada(at)hotmail(dot)com> |
---|---|
To: | <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | SELECT muy LENTO |
Date: | 2008-11-10 15:09:26 |
Message-ID: | BLU137-W38D29A82AA623AE4092625E31A0@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
ten go un select el cual usando un indice en una tabla de 3,000,000 dura mas de 30 seg. El problema es que el no usa el indice en esta tabla y se va por una busqueda secuencial
Este es el select y el EXPLAIN de cada uno
SELECT
B.fid_disposition,
COUNT(1)
FROM
aegon.ttransaction_head A,
aegon.ttransaction_det B
WHERE
1=1
AND
A.fdate_proccess=NOW()::DATE-90
AND
b.fdate_proccess=A.fdate_proccess
AND
B.fsec_doc=A.fsec_doc
GROUP BY
B.fid_disposition
QUERY
PLAN
HashAggregate
(cost=179822.04..179822.05 rows=1 width=8) (actual time=196.783..196.803 rows=26
loops=1)
-> Hash Join
(cost=74707.34..179818.22 rows=763 width=8) (actual time=67.516..172.596
rows=34075 loops=1)
Hash Cond: (b.fsec_doc =
a.fsec_doc)
-> Bitmap Heap Scan on
ttransaction_det b (cost=744.97..104756.35 rows=44887 width=16) (actual
time=7.545..36.134 rows=34075 loops=1)
Recheck Cond:
(fdate_proccess = ((now())::date - 90))
-> Bitmap Index
Scan on ttransaction_det_idx3 (cost=0.00..733.75 rows=44887 width=0) (actual
time=6.046..6.046 rows=34075 loops=1)
Index Cond:
(fdate_proccess = ((now())::date - 90))
-> Hash
(cost=73109.94..73109.94 rows=51955 width=8) (actual time=59.944..59.944
rows=34649 loops=1)
-> Bitmap Heap
Scan on ttransaction_head a (cost=1459.53..73109.94 rows=51955 width=8) (actual
time=6.694..35.741 rows=34649 loops=1)
Recheck Cond:
(fdate_proccess = ((now())::date - 90))
-> Bitmap
Index Scan on ttransaction_head_idx (cost=0.00..1446.54 rows=51955 width=0)
(actual time=5.860..5.860 rows=34649 loops=1)
Index
Cond: (fdate_proccess = ((now())::date - 90))
Total runtime: 196.904
msEn este la busqueda es totalmente indexada pero tuve que agregar la fecha en el detalle. El modelo que estoy usando es Header/Detalle. Mi tabla de header 3.5 millones de records
Ahora veamos como deberia ser por normalizacion:
SELECT
B.fid_disposition,
COUNT(1)
FROM
aegon.ttransaction_head A,
aegon.ttransaction_det B
WHERE
1=1
AND
A.fdate_proccess=NOW()::DATE-90
AND
B.fsec_doc=A.fsec_doc
GROUP BY
B.fid_disposition
QUERY
PLAN
HashAggregate
(cost=494710.46..494710.62 rows=13 width=8) (actual time=30808.479..30808.498
rows=26 loops=1)
-> Hash Join
(cost=73937.37..493899.45 rows=162201 width=8) (actual time=106.614..30780.621
rows=34075 loops=1)
Hash Cond: (b.fsec_doc =
a.fsec_doc)
-> Seq Scan on
ttransaction_det b (cost=0.00..274669.35 rows=9541235 width=12) (actual
time=0.010..21649.412 rows=9541235 loops=1)
-> Hash
(cost=73109.94..73109.94 rows=51955 width=4) (actual time=58.139..58.139
rows=34649 loops=1)
-> Bitmap Heap
Scan on ttransaction_head a (cost=1459.53..73109.94 rows=51955 width=4) (actual
time=6.664..34.658 rows=34649 loops=1)
Recheck Cond:
(fdate_proccess = ((now())::date - 90))
-> Bitmap
Index Scan on ttransaction_head_idx (cost=0.00..1446.54 rows=51955 width=0)
(actual time=5.825..5.825 rows=34649 loops=1)
Index
Cond: (fdate_proccess = ((now())::date - 90))
Total runtime: 30808.604
ms
La pregunta porque el en la tabla
ttransaction_det usa seq si existe un indice para ser usado en el campo B.fsec_doc y cuando agrego la fecha a esta tabla, como se muestra en el query anterior, tuve que agregar la fecha a la tabla de detalle para lograr esos tiempos, obviamente esto no es muy deseable pero funciona.
*-------------------------------------------------------*
*-Edwin Quijada
*-Developer DataBase
*-JQ Microsistemas
*-809-849-8087
* " Si deseas lograr cosas excepcionales debes de hacer cosas fuera de lo comun"
*-------------------------------------------------------*
_________________________________________________________________
Stay up to date on your PC, the Web, and your mobile phone with Windows Live
http://clk.atdmt.com/MRT/go/119462413/direct/01/
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2008-11-10 15:09:47 | Re: cantidad de transacción de postgresql en un dia |
Previous Message | Ernesto Quiñones | 2008-11-10 14:44:17 | cantidad de transacción de postgresql en un dia |