2017-01-04 2 views
0

Я ищу выбор круга по расстоянию. У меня есть одна точка с широтой & долготы, и я хочу искать, если у меня в базе данных есть несколько точек вокруг меня. И да, это должен быть круг!Медленная производительность при запуске многократного сложного пространственного запроса в MySQL

Я использую этот пункт в запросе (я только Google, я не могу сделать математику):

((6373 * acos (cos (radians(48.568962)) * cos(radians(X(coords))) * cos(radians(Y(coords)) - radians(6.821352)) + sin (radians(48.568962)) * sin(radians(X(coords))))) <='0.2') 

0,2 = 200 м

  1. Я использую тип данных POINT
  2. Да, у меня есть Пространственный индекс на это
  3. Да, я пытаюсь использовать «пространственную» функцию, но это не возвращает круг, он возвращается некоторые OVAL и мне нужен ТОЧНЫЙ круг

Этот пункт «круг» принимает очень, очень, очень долгое время для всех таблиц. Когда я использую метод OVAL PROTITIAL foos. Это может быть 0,1 с, и это здорово! Но мне нужен круг, и это занимает 17 секунд, LOL.

Вы можете мне помочь? Большое спасибо, ребята!

EDIT: пространственные функции означает, что некоторые, как это: (. Таблица структура)

WHERE ST_Contains(ST_Buffer(
     ST_GeomFromText('POINT(12.3456 34.5678)'), (0.00001*1000)) , coords) <= 1 /* 1 km */ 

EDIT 2:

enter image description here enter image description here

Я ожидаю 10 строк из этой таблицы, конечно У меня есть показатели по wz_uuid

select a....., b.... from table_1 a left join table_2 b on a.wz_uuid=b.wz_uuid 

И это не только 2 таблицы, у меня есть 11 таблиц * 2, как это. (еженедельные резервные копии базы данных). Первые таблицы (_1) имеют 0-4000 строк, 2-11 - 300k + строк.

Все индексы актуальны, а также типы данных &.

wz_uuid & id - unique, btree index 
others - btree indexes 
coords - spatial index 
+0

Да, вы должны использовать геопространственную функцию, чтобы избежать использования дорогостоящей формулы Haversine. –

+0

Опубликуйте свои таблицы и сообщите нам ожидаемый результат. то, как вы используете геопространственные функции, индекс не может использоваться. – e4c5

+0

Почему я не могу его использовать? Я уже тестировал его, но это овал, мне просто нужна правильная функция, которую я считаю для круга. Я могу показать вам таблицы, но это просто обычная оптимизированная таблица с 30 столбцами, и мне все они нужны, потому что мне нужно сделать строку AVG. –

ответ

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