|
Select из большой таблицы с jsonb
|
|||
---|---|---|---|
#18+
Добрый день. Есть таблица с данными, количество записей на данный момент порядка 200млн. Версия PostgreSQL 11.8 (Ubuntu 11.8-1.pgdg18.04+1). Один столбец типа jsonb, по которому надо производить отбор. Также пользователь может выбирать несколько значений каждого параметра. Таблица: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Индексы: Код: plsql 1. 2.
Запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Такой запрос обрабатывается около 12 секунд. Вот план запроса: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Во-первых в плане я не вижу использование индекса idx_data_measure. Во-вторых мне кажется что все-таки запрос выполняется долго, и как-то можно сделать быстрее. Я пробовал создать общий индекс (measure_id, parameters) с помощью btree_gin, но это не помогло и я этот индекс прибил. Вопросы: насколько оптимально созданы индексы, создан запрос, и можно ли как-то сделать чтобы это работало быстрее? Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2020, 13:54 |
|
Select из большой таблицы с jsonb
|
|||
---|---|---|---|
#18+
Видимо, у индекса idx_data_measure плохая селективность, вот он и был выброшен из плана. Сомнительно, что можно что-то сделать для улучшения с parameters. Разве что '2' и '720' часто используемые и стабильные значения, тогда можно по них создать свои индексы навроде Код: sql 1.
Есть только предложение попробовать создать индекс Код: sql 1.
подавать ему все параметры через jsonb Код: sql 1. 2. 3.
и проверить производительность такого запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 22:18 |
|
Select из большой таблицы с jsonb
|
|||
---|---|---|---|
#18+
Shniperson, Shnipersonколичество записей на данный момент порядка 200млн. Напрашивается партицирование по measure_id с сохранением индекса по parameters. У вас очень распухший индекс получился. Очень много IO. Shniperson Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2020, 09:54 |
|
|
start [/forum/topic.php?fid=53&fpage=24&tid=1994550]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
2ms |
others: | 18ms |
total: | 146ms |
0 / 0 |