|
Планировщик не использует индекс
|
|||
---|---|---|---|
#18+
Использую расширение Postgis. Есть две таблицы: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
Делаю запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Отключаю segscan: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Как заставить планировщик использовать индекс? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2017, 08:45 |
|
Планировщик не использует индекс
|
|||
---|---|---|---|
#18+
kalombo, в зависимости от числа локаций в радиусе. попробуйте навязать так, например: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
а лучше подумайте над тем, нельзя ли как--то гист индекс прикрутить: https://habrahabr.ru/post/228023/ ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2017, 10:03 |
|
Планировщик не использует индекс
|
|||
---|---|---|---|
#18+
qwwqkalombo, в зависимости от числа локаций в радиусе. попробуйте навязать так, например: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Не помогло.... qwwqа лучше подумайте над тем, нельзя ли как--то гист индекс прикрутить: https://habrahabr.ru/post/228023/ Я так понял, проблема не в индексе для location, а в том, что не используется индекс для facility_id. Я пробовал заставить планировщик использовать индекс путем использования St_DWithin и преобразования geometry в geography - не помогло. Здесь результаты http://dumpz.org/2622879/ 1 - seqscan off, 2 - geometry и ST_DistanceSphere, 3 - geography и ST_DWithin Но в любом случае за статью спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2017, 15:43 |
|
Планировщик не использует индекс
|
|||
---|---|---|---|
#18+
kalomboНе помогло.... а план с WITH есть ? (можно на ANY( ARRAY(SELECT id..) переписать. еще можно через , Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
kalomboqwwqа лучше подумайте над тем, нельзя ли как--то гист индекс прикрутить: https://habrahabr.ru/post/228023/ Я так понял, проблема не в индексе для location, а в том, что не используется индекс для facility_id. Я пробовал заставить планировщик использовать индекс путем использования St_DWithin и преобразования geometry в geography - не помогло. Здесь результаты http://dumpz.org/2622879/ 1 - seqscan off, 2 - geometry и ST_DistanceSphere, 3 - geography и ST_DWithin Но в любом случае за статью спасибо. если суметь загнать поиск локации на гист, планер мог бы четче оценить что искать нестед--лупом по фасилити дешевле. (оценить число локаций в радиусе более точно) . далее можно доп. фильтр более точным _St_DistanceSferoid наложить. ещй костами можно поиграть. снизить рендом-кост с 4 до 2 например. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2017, 16:05 |
|
Планировщик не использует индекс
|
|||
---|---|---|---|
#18+
kalombo, проблема в том, что планировщик не может оценить корректно число строк, подходящих под условие Код: sql 1.
и считает что под него попадает треть строк. если есть уверенность, что под это условие не будет попадать сильно много строк, то можно попробовать прибить nested loop с помощью lateral join или в варианте с with выше дописать limit 100-1000 (максимальное число строк, которое по идее будет под условие с ST_DistanceSphere подходить). еще может получиться нужный план при добавлении order by "storagepricingapp_storageunit"."id". если база помещается в память или используются ssd диски, то можно уменьшить аккуратно random_page_cost. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2017, 18:37 |
|
|
start [/forum/topic.php?fid=53&msg=39486657&tid=1996379]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 136ms |
0 / 0 |