Hola nuevamente, desconozco los % exactamente pero te dejo algunos enlaces que me ayudaron en su momento a comprender un poco mas los BRIN, y puede que te ayude a ti también a conocer a los índices BRIN y determinar si te ajustan a tu escenario y tal vez comprender el motivo del optimizador de escoger uno u otro.
https://www.postgresql.org/docs/10/brin-intro.html https://en.m.wikipedia.org/wiki/Block_Range_Index https://info.crunchydata.com/blog/postgresql-brin-indexes-big-data-performance-with-minimal-storage https://m.habr.com/en/company/postgrespro/blog/452900/ https://www.postgresql.fastware.com/blog/brin-indexes-what-are-they-and-how-do-you-use-them Saludos El mié., 26 de jun. de 2019 10:05 p. m., Hellmuth Vargas <hiv...@gmail.com> escribió: > Hola > > Muchas gracias por la oportuna respuesta, quiere decir que cuando el > intervalo o rango del filtro sea amplio y/o la cantidad de registros que > cumplan la condición sea mayor que el 20% de los registros es preferido el > BRIN, osea esta mas enforcado en traer volumen... se podría deducir... > > El mié., 26 de jun. de 2019 a la(s) 16:25, Anthony Sotolongo ( > asotolo...@gmail.com) escribió: > >> Hola Hellmuth, corroborando lo que comenta Alvaro sobre la consulta, un >> ejemplo: >> >> >> create table prueba (i int, fecha timestamp ); >> >> insert into prueba >> select (random()*10000000)::int, fec from generate_series >> ('2007-02-01'::timestamp >> , '2008-04-01'::timestamp >> , '1 min'::interval) as fec; >> >> >> >> create index idx_btree on prueba (fecha); >> create index idx_brin on prueba using brin (fecha); >> ANALYZE prueba ; >> >> EXPLAIN ANALYZE >> select * from prueba where fecha ='2007-02-01 00:02:00' ; >> >> --selecciona el btree >> >> "Index Scan using idx_btree on prueba (cost=0.43..11.43 rows=2 >> width=12) (actual time=0.036..0.044 rows=2 loops=1)" >> " Index Cond: (fecha = '2007-02-01 00:02:00'::timestamp without time >> zone)" >> "Planning time: 0.224 ms" >> "Execution time: 0.115 ms" >> >> >> EXPLAIN ANALYZE >> select * from prueba where fecha >'2007-02-01 00:02:00' and >> fecha <'2007-08-10 00:02:00'; >> >> --selecciona el brin >> >> "Bitmap Heap Scan on prueba (cost=151.06..23475.16 rows=550176 >> width=12) (actual time=0.210..68.213 rows=547198 loops=1)" >> " Recheck Cond: ((fecha > '2007-02-01 00:02:00'::timestamp without time >> zone) AND (fecha < '2007-08-10 00:02:00'::timestamp without time zone))" >> " Rows Removed by Index Recheck: 44802" >> " Heap Blocks: lossy=3200" >> " -> Bitmap Index Scan on idx_brin (cost=0.00..13.51 rows=1113807 >> width=0) (actual time=0.185..0.185 rows=32000 loops=1)" >> " Index Cond: ((fecha > '2007-02-01 00:02:00'::timestamp without >> time zone) AND (fecha < '2007-08-10 00:02:00'::timestamp without time >> zone))" >> "Planning time: 0.222 ms" >> "Execution time: 85.913 ms" >> >> >> Saludos >> >> >> >> El 26-06-19 a las 17:07, Alvaro Herrera escribió: >> > Hellmuth Vargas escribió: >> >> Hola lista >> >> >> >> Si sobre una columna de una tabla están definidos tanto un índice btree >> >> como un brin el optimizador siempre va a preferir el btree sobre el >> brin? >> > Depende de la consulta, pero en general sí. >> > >> > > > -- > Cordialmente, > > Ing. Hellmuth I. Vargas S. > Esp. Telemática y Negocios por Internet > Oracle Database 10g Administrator Certified Associate > EnterpriseDB Certified PostgreSQL 9.3 Associate > >