Alguém poderia me ajudar a interpretar o porque desta situação.
Estou fazendo um experimento com 22 queries do Benchmark TPCH[1],
verificando o desempenho de índices nas consultas.
Das 22 queries, em 5 delas o otimizador utilizou índices secundários,
definidos em algumas colunas das 8 tabelas do BD.
Em outro experimento em paralelo executei essas 5 queries num BD sem
uso de índices, exatamente para ver se o uso de índices resultava em
diminuição de tempo, mas aconteceu o contrário, ou seja,com índice
aumentou o tempo das consultas.
Gostaria de entender, porque a estatística de custo errou em todos os
casos, ou seja, embora o custo_total nas queries que utilizaram
índices são menores, o tempo gasto para executar foi maior que as
queries que não utilizaram indices.
Vejam abaixo, que a primeira linha refere-se a query 6 que utilizou
índice, o custo foi 3335809, menor do que o custo 5255959, da mesma
query 6 que não utilizou índice. Mas veja o tempo das duas, a query
que utilizou índice demorou 7 minutos enquanto sem o uso de índices
demorou 55 segundos, idem para os demais casos.
Porque será que o custo total mostra o valor menor para todos os
casos? Sendo que demorou mais para executar, o que da a impressão que
o custo foi maior.
Indices |Query |Tempo_Gasto |Custo_Total
============================================
Sim 6 00:07:56 3335809.61
Nao 6 00:00:55 5255959.00
Sim 7 00:09:16 5847359.97
Nao 7 00:02:08 6793148.45
Sim 10 00:07:04 40743017.17
Nao 10 00:02:14 41341406.62
Sim 15 00:10:03 6431359.90
Nao 15 00:01:56 9608659.87
Sim 20 00:12:48 8412159.69
Nao 20 00:05:49 9537835.93
=============================================
Segue a query 6 e o seu Explain Analyse com e sem índices.
------------- QUERY 6 ---------------------------------------------
select
sum(l_extendedprice * l_discount) as revenue
from
lineitem
where
l_shipdate >= date '1995-01-01'
and l_shipdate < date '1995-01-01' + interval '1' year
and l_discount between 0.09 - 0.01 and 0.09 + 0.01
and l_quantity < 24;
------------------ COM ÍNDICE (idx_l_shipdatelineitem000
)------------------------------
Plano Execucao:Aggregate (cost=3335809.59..3335809.61 rows=1
width=16) (actual time=476033.847..476033.847 rows=1 loops=1)
-> Bitmap Heap Scan on lineitem (cost=376416.20..3330284.29
rows=2210122 width=16) (actual time=375293.183..471695.391
rows=2282333 loops=1)
Recheck Cond: ((l_shipdate >= _1995-01-01_::date) AND
(l_shipdate < _1996-01-01 00:00:00_::timestamp without time zone))
Filter: ((l_discount >= 0.08) AND (l_discount <= 0.10) AND
(l_quantity < 24::numeric))
-> Bitmap Index Scan on idx_l_shipdatelineitem000
(cost=0.00..375863.67 rows=17925026 width=0) (actual
time=375289.456..375289.456 rows=18211743 loops=1)
Index Cond: ((l_shipdate >= _1995-01-01_::date) AND
(l_shipdate < _1996-01-01 00:00:00_::timestamp without time
zone))Total runtime: 476034.306 ms
------------------ SEM USO DE ÍNDICE
---------------------------------------------------
Plano Execucao:Aggregate (cost=5255958.99..5255959.00 rows=1
width=16) (actual time=55051.051..55051.051 rows=1 loops=1)
-> Seq Scan on lineitem (cost=0.00..5250433.68 rows=2210122
width=16) (actual time=0.394..52236.276 rows=2282333 loops=1)
Filter: ((l_shipdate >= _1995-01-01_::date) AND (l_shipdate <
_1996-01-01 00:00:00_::timestamp without time zone)
AND (l_discount >= 0.08) AND (l_discount <= 0.10) AND
(l_quantity < 24::numeric))Total runtime: 55051.380 ms
Qualquer dica é bem vinda!!
[]`s Neto
[1] www.tpc.org/tpch/
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral