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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral