|
|
|
Поиск ближайших записей по координатам
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Пытаюсь оптимизировать следующю задачу. Дано: 1. Кординаты объектов на карте 2. Координата пользователя, где он находится в данный момент Нужно: Показать ближайшие к пользователю объекты на карте, понятие ближайший задано расстоянием - 2000 м. Весь функционал реализовал и все работает, но смущает что идет Seq Scan и не используется индекс (сейчас данных пока мало, но их кол-во будет расти). Ниже лабораторный код (в нем ближайший задан как 300000): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Сейчас использую запрос (300000 - граница ближайшего, ST_MakePoint(55.5, 45.45), 4326) - условные координаты пользователя) Код: sql 1. 2. И по его плану видно, что индекс не используется Код: plaintext 1. По следам встреч PostgreSQL узнал про <-> Однако запрос вида Код: sql 1. 2. выдает ошибку Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. И я так понимаю что оператора <-> для geography нет Выборка из 1М значений происходит ~1,6 c. Собственно как ускорить С уважением, Станислав Свириденко ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 13:13:12 |
|
||
|
Поиск ближайших записей по координатам
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, сам спросил сам и отвечу. Правильнее использовать функцию ST_DWithin ( http://postgis.org/documentation/manual-svn/ST_DWithin.html) Пример для вышеописанной задачи Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 13:21:22 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=120&tid=1998369]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
15ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 276ms |

| 0 / 0 |
