/\/\/\/\/\/\ |
---|
На сколько процентов и за счет чего произойдет ускорение? Мне это действительно интересно. А так же методика подсчета. |
Мы сейчас экспериментируем с новым поиском по фильтрам (тегам) на сайте. Отлично работает, можно отказаться от join к справочникам.
Возможно, если объединить теги с нормализованными формами ("fts":...) из tsvector, поиск вообще начнет работать по единственной таблице и одному индексу. Индекс очень компактный, а селективность превосходная. На старой нормализованной структуре это работало раза в два дольше.
explain (analyze,buffers)
select articlecode,tagjb -->'fts'
from cache.salepricearticlescache
where tagjb @> '{"fts": ["белый", "красный", "ручка"], "tags": [{"tid": 21, "id": [10, 12]},{"tid": 5, "id": [1]}]}' and Level =1
Bitmap Heap Scan on salepricearticlescache (cost=412.26..605.19 rows=50 width=273) (actual time=4.514..5.250 rows=39 loops=1)
Recheck Cond: ((tagjb @> '{"fts": ["белый", "красный", "ручка"], "tags": [{"id": [10, 12], "tid": 21}, {"id": [1], "tid": 5}]}'::jsonb) AND (level = 1))
Heap Blocks: exact=39
Buffers: shared hit=185
-> Bitmap Index Scan on i_cache_salepricearticlescache_jsonb_opt (cost=0.00..412.25 rows=50 width=0) (actual time=4.449..4.449 rows=39 loops=1)
Index Cond: (tagjb @> '{"fts": ["белый", "красный", "ручка"], "tags": [{"id": [10, 12], "tid": 21}, {"id": [1], "tid": 5}]}'::jsonb)
Buffers: shared hit=131
Planning time: 1.905 ms
Execution time: 5.299 ms