как сделать выборочный запрос быстрее на Postgis - PullRequest
0 голосов
/ 06 апреля 2020

этот запрос выбирает геометрию _id внутри круга

 select tbl2.geometry_id from geometryTable tbl1
        join geometryTable tbl2 on  ST_Intersects(ST_Buffer(ST_centroid(tbl1.geometry)::geography, 1000)::geometry, tbl2.geometry)
    where tbl1.geometry_id = '112233'

этот запрос работает нормально, но он занимал слишком много раз, более 20 секунд. Мне нужно сделать этот запрос быстрее.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Чтобы получить tbl2 геометрию, которая находится в пределах 1000 метров от tbl1 геометрии центроида, вы можете опустить создание буфера и рассчитывать расстояние напрямую, используя ST_DWithin

select tbl2.geometry_id 
from geometryTable tbl1
   join geometryTable tbl2 
    on ST_DWithin(ST_centroid(tbl1.geometry)::geography, tbl2.geometry::geography,1000, true)
where tbl1.geometry_id = '112233';

Если этого недостаточно, вы можете создать пространственный индекс для географии центроидов

CREATE tl1_centroid_geog ON tbl1 USING GIST(geography(ST_centroid(geometry)));

и, в конечном итоге, для географии tbl2

CREATE tl2_geog ON tbl2 USING GIST(geography(geometry));
0 голосов
/ 06 апреля 2020

Вы можете добавить индекс, если данные большие. Пожалуйста, прочитайте - tutorialspoint примерно так же. Надеюсь, это поможет

...