|
оптимизация запроса с gist-индексом
|
|||
---|---|---|---|
#18+
Доброго дня, коллеги, есть таблица (привожу необходимый минимум данных) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
postgre 9.5, linux, в таблице около миллиона записей, на каждый manufacturer_id приходится от 1 до 100,000 записей, записей где manufacturer_id is null в таблице не имеется. В приложении очень часто запускается запрос вида Код: plsql 1.
метрики показывают, что он ест очень много ресурсов, если можно его как-то ускорить, то лучше это сделать. Копал в направлении создании двухстолбцового индекса на связку (manufacturer_id, "name"), но не нашёл способа создать индекс, где половинка будет BTREE-шная (на manufacturer_id), а половинка - GIST'овая. Сам explain сейчас выглядит "Bitmap Heap Scan on t (cost=200.73..204.75 rows=1 width=594)" " Recheck Cond: ((manufacturer_id = 1) AND ((name)::text % 'SANTEK'::text))" " -> BitmapAnd (cost=200.73..200.73 rows=1 width=0)" " -> Bitmap Index Scan on "6ca70c50a143165402024556c3fd94a9" (cost=0.00..6.53 rows=280 width=0)" " Index Cond: (manufacturer_id = 1)" " -> Bitmap Index Scan on ref_nomenclature_name_trgm (cost=0.00..193.95 rows=1272 width=0)" " Index Cond: ((name)::text % 'SANTEK'::text)" Прошу подсказать знающих следующее: 1) Можно ли создать индекс на связку двух полей (что я выше указывал), если можно, то как? И нужно ли? 2) Правильно ли я понимаю, что сейчас используются оба индекса в запросе? 3) Каковы (если есть) best practices на такого рода задачу? Или не best - в общем, прошу инфы. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2020, 01:49 |
|
|
start [/forum/topic.php?fid=53&msg=39942127&tid=1994754]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
44ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 277ms |
total: | 428ms |
0 / 0 |