SQL Server, Lat и Lon запрос - PullRequest
1 голос
/ 05 марта 2012

Я выполняю запрос, чтобы получить все местоположения в таблице в радиусе 15 миль.Запрос может занять до 15 секунд.

SELECT * 
FROM rmiukpostcodes
WHERE 3963.191 * ACOS( (SIN(PI()*50.8320711166062/180)*SIN(PI()*latitude/180))+(COS(PI()*50.8320711166062/180)*cos(PI()*latitude/180)*COS(PI()*longitude/180-PI()*-0.207548227491786/180))) < = 5 

Могу ли я что-нибудь сделать, чтобы ускорить его?

Ответы [ 3 ]

3 голосов
/ 05 марта 2012
1 голос
/ 05 марта 2012

Вы могли бы выиграть здесь от использования вычисляемого постоянного столбца. Я полагаю, что вы выполняете сканирование таблицы / индекса из-за вашего условия WHERE.

Захват вашего плана выполнения. Попробуйте добавить вычисляемый столбец и измените запрос SELECT.

0 голосов
/ 05 марта 2012

Ваш запрос читает каждую строку в таблице.Используйте некоторые SARGABLE критерии фильтра и индекс.

Например: перед выполнением запроса предварительно вычислите максимальный / минимальный лат или длинный и используйте его.* Тогда индекс по кодам (Lat) поможет в запросе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...