2012-01-26 2 views
1

У меня есть таблица (natomr) с 200 записями, которая определяет разные области. Я хочу узнать, какие области, которые содержат произвольную точку. Это мой SQL:ST_DWith делает запрос медленным (> 1000 мс)

SELECT * 
FROM natomr 
WHERE ST_DWithin(the_geom4326, 
    ST_geomfromtext('POINT(13.614807 59.684035)', 4326)::geography, 1) 

Этот запрос занимает около 1200 мс, что, как я полагаю, слишком длинный для такой маленькой таблицы.

Я создал индекс для the_geom4326, как это:

CREATE INDEX natomr_the_geom4326_gist 
    ON natomr 
    USING gist 
    (the_geom4326); 

Я также запустить VACUUM ПОЛНОЙ команды, но это не имеет никакого эффекта.

Что делать, чтобы ускорить запрос?

ответ

1

Трудно сказать, если это неожиданно или нет из того, что у вас здесь ... 1200MS можно было бы ожидать.

  • Авто вакуум предотвращает обертку данных ... не должны иметь влияние скорости на столе этот маленький
  • Таблица почти слишком мал для индекса, чтобы быть действительно эффективным.

Некоторые потенциалы:

st_dwithin имеет определенное количество накладных расходов, связанных с ним ... он состоит из 3-х вызовов двух других функций, которые полностью CONTRIB файлы библиотек (в C). Таким образом, ваше время выполнения будет выглядеть примерно как накладные расходы + x секунд на каждую обработанную запись. Попробуйте немного масштабировать свои данные ... попробуйте 10 точек в одном запросе. Это даст вам лучшее представление о накладных расходах, связанных с st_dwithin.

Насколько велики полигоны в файлах формы? В качестве интересного теста попробуйте определить 5-точечный многоугольник и попытайтесь выполнить запрос, чтобы найти точку в этом многоугольнике. Теперь определите многоугольник 2000 точек и попробуйте один и тот же тест. Если ваши 200 полигонов здесь имеют 2000 точек и более, 1200MS не звучит слишком необоснованно в зависимости от мощности вашего аппарата.

+0

Это оказалась функция географии, которая замедляла ее. Когда я удалил это заняло 17ms! – luttkens

+0

@ luttkens, так что если вы отбросьте географию? что тогда? Мне нужно сделать? – emerak

Смежные вопросы