SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.07.2014 11:23:44

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Оптимизация Гео-Координат

Что есть сейчас:
2 столбца "широта" и "долгота", в формате double(9,6)
Поиск вхождения точки в полигон из четырёх сторон по такому алгоритму:

SELECT
...
WHERE ((`latitude` BETWEEN низ AND верх) AND (`longitude` BETWEEN левая-граница AND правая-граница))


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


Сначала задумалась над ускорением. Пришёл на ум изврат в чистом виде. А что если на уровне приложения убирать запятую, добавлять нули в конец приводя к одной длине куска после запятой и записывать как INT (BIGINT), поиск будет быстрей, чем среди плавающих точек?

Для радиуса пришла к POINT (но так до конца не поняла, что это за фрукт sad ). Я понимаю, что для радиуса он намного лучше, но что делать со старыми задачами? И тут как бы два момента:
1. Насколько предыдущая задача при работе со стандартными функциями по поиску POINT быстрей/медленней, чем алгоритм наверху?
2. Тот же самый вопрос с учётом предыдущей задумки избавления от плавающей запятой, ускорит?


Скажи миру - НЯ!

Неактивен

 

#2 26.07.2014 11:41:40

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Оптимизация Гео-Координат

Почему бы Вам не воспользоваться mysql'евскими типами данных и соответствующими индексами ( http://dev.mysql.com/doc/refman/5.0/en/ … sions.html )? Там и функции есть некоторые геометрические.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 26.07.2014 12:50:09

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Оптимизация Гео-Координат

deadka написал:

Почему бы Вам не воспользоваться mysql'евскими типами данных и соответствующими индексами ( http://dev.mysql.com/doc/refman/5.0/en/ … sions.html )? Там и функции есть некоторые геометрические.

Ну когда делался первый вариант уже не помню почему это отвергли. Сейчас проблема в том, чтобы не сломать готовый велосипед. Ну то, что вы скинули, это тот же POINT, что я сверху указала. Вопрос был в другом, я понимаю, что мимо него мне не куда не деться, для выдачи по радиусу. Но его проблема в читаемости данных, они там своими кракозябрами записаны, а данные нам нужно не только находить, но и выдавать обратно. Так, что я думаю POINT сделать по соседству с уже используемыми столбцами.

Вопросы в принципе следующие:
- стоит ли избавляться от плавающей точки?
- если с радиусом как бы ясно, то с вхождением в прямоугольник, обгонит ли GIS функция указанный сверху алгоритм? Ведь для этого нужно будет задавать полигон, это всё конвертации лишние.


Скажи миру - НЯ!

Неактивен

 

#4 26.07.2014 13:52:25

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Оптимизация Гео-Координат

Если количество знаков после запятой фиксировано, всм ограничено сверху, то я бы скорее рекомендовал тип decimal. Сам его использую в гис-проекте, и норм.

Что до обгоняния - тут проверять надо smile, слишком от многих факторов зависит. Как померите скорость - обязательно расскажите, что получилось wink.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 26.07.2014 14:13:48

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Оптимизация Гео-Координат

deadka написал:

Если количество знаков после запятой фиксировано, всм ограничено сверху, то я бы скорее рекомендовал тип decimal. Сам его использую в гис-проекте, и норм.

Что до обгоняния - тут проверять надо smile, слишком от многих факторов зависит. Как померите скорость - обязательно расскажите, что получилось wink.

фиксировано - всегда одинаково? Если так, то нет, иногда гугл выдаёт не полную длину кушая нули в конце. Я где-то буквально сегодня начиталась, что по какой-то причине при SELECT тип влияет на скорость поиска. Наткнулась случайно, там стояло, что если погрешность сильно напрягает, как например денежные операции, то стоит использовать DECIMAL, но он будет медленнее, чем DOUBLE/FLOUT при поиске.


deadka написал:

Что до обгоняния - тут проверять надо smile, слишком от многих факторов зависит. Как померите скорость - обязательно расскажите, что получилось wink.

Я надеялась, что либо уже кто-то проверял до меня, либо хотя бы в теории подскажут. Пока не обновим локальный тест-сервер, до уровня продакшена, на нём нету смысла тестить sad

Отредактированно animegirl (26.07.2014 15:35:16)


Скажи миру - НЯ!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson