Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
всреднем 7 атрибутах
SELECT * FROM products WHERE width>=$w_min AND width <=$w_max;
SELECT *FROM products WHERE idx('{1,2,3,15,100500}', width)::boolean;
SELECT *FROM products WHERE width IN (1,2,3,15,100500);
>= AND <=Типа, от 1 до 10 000 с шагом 1. Такое в intarray не положить.
SELECT * FROM products WHERE width>=1 AND width<=10000 AND (width%2)::boolean;
С таким вариантом проблема, когда продукты разнородные и у них есть не только width, но и height, depth, length, diagonal, density, volume, etc.
Каждый фильтр = столбец.
EXPLAIN (ANALYSE, buffers) и поиграться с расположением фильтров.SELECT * FROM products WHERE filters @> ARRAY[7267]
Seq Scan on public.products (cost=0.00..20.38 rows=1 width=68)
Output: id, title, filters
Filter: (products.filters @> '{7267}'::integer[])
Index Scan using products_idx on public.products (cost=0.14..8.16 rows=1 width=68)
Output: id, title, filters
Index Cond: (products.filters @> '{7267}'::integer[])
Bitmap Heap Scan on public.products (cost=8.01..12.02 rows=1 width=68)
Output: id, title, filters
Recheck Cond: (products.filters @> '{7267}'::integer[])
-> Bitmap Index Scan on products_idx (cost=0.00..8.01 rows=1 width=0)
Index Cond: (products.filters @> '{7267}'::integer[])
Не тот ли это битмап, о котором вы спрашиваете
PostrgreSQL: ускоряемся через intarray