|
Создать индекс для рекурсивного запроса
|
|||
---|---|---|---|
#18+
Есть рекурсивный запрос в таблице Document для получение записей вниз по иерархии, идентификатор в таблице @Document. Поле Hierarchy ссылка на идентификатор родительской записи. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
План выполнения запроса: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Хочется избавиться от seq scan Есть индекс по полю Hierarchy - он не используется Есть составной индекс (Hierarchy, @Document ) - он не используется сделал индекс CREATE INDEX "Hier" ON "Document" USING btree ("Hierarchy" NULLS LAST, "@Document" NULLS LAST, "Hint" NULLS LAST); он используется, но перестает использоваться когда добавляется новое поле в SELECT, приходится добавлять новое поле в индекс. Как бы создать индекс, на который не влиял бы набор полей в SELECT? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2021, 22:01 |
|
Создать индекс для рекурсивного запроса
|
|||
---|---|---|---|
#18+
polin11, 1)rows=766 - просто слишком мало чтобы index scan включался... seq scan вероятнее всего будет быстрее это первое 2)второе - база ожидает что " -> Hash Join (cost=0.33..69.75 rows=389 width=76) (actual time=0.044..0.143 rows=1 loops=5)" " Hash Cond: ("Document"."Hierarchy" = hier_down_1."@Document")" по "Document"."Hierarchy" = hier_down_1."@Document" вернется 389 строк а реально возвращается одна строка... у вас там статистика распределения данных очень странная судя по всему очень и очень неровная и в такой ситуации seq scan/hash join будет быстрее (исходя из того что база себе думает). сделайте analyze "Document"; и покажите что у вас показывает select null_frac, n_distinct, most_common_vals,most_common_freqs from pg_stats where tablename='Document' and attname='Hierarchy'; ? PS: у вас постановка вопроса не верная и вопрос не про подходящий индекс (подходящий тут по Document.Hierarchy where Hierarchy is not null скорее всего, но использоваться он не будет потому что выше). -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2021, 22:44 |
|
|
start [/forum/topic.php?fid=53&fpage=17&tid=1994240]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
others: | 355ms |
total: | 466ms |
0 / 0 |