Вопрос о производительности...
У меня есть база данных домов, в которых есть данные геолокации (долгота и широта).
Что я хочу сделать, это найти лучший способ хранения локальных данных в моем MySQL (v5.0.24a) с использованием базы данных InnoDB, чтобы я мог выполнять множество запросов, где я возвращаю все домашние записи которые находятся между x1 и x2 latitude
и y1 и y2 longitude
.
В настоящее время моя схема базы данных
---------------------
Homes
---------------------
geolat - Float (10,6)
geolng - Float (10,6)
---------------------
И мой запрос:
SELECT ...
WHERE geolat BETWEEN x1 AND x2
AND geolng BETWEEN y1 AND y2
- Это то, что я описал выше, лучший способ сохранить данных широты и долготы в MySQL с использованием Float (10,6) и выделения долготы/широты? Если нет, то что? Существуют типы Float, Decimal и даже Spatial в качестве типа данных.
- Это лучший способ выполнить SQL с точки зрения производительности? Если нет, то что?
- Использует ли другой MySQL двигатель базы данных имеет смысл?
ОБНОВЛЕНИЕ: еще без ответа
У меня есть 3 разных ответа ниже. Один человек говорит, чтобы использовать Float
. Один человек говорит использовать INT
. Один человек говорит использовать Spatial
.
Итак, я использовал инструкцию MySQL "EXPLAIN" для измерения скорости выполнения SQL. По-видимому, при использовании INT
или Float
для типа данных долготы и широты существует абсолютно никакой разницы в выполнении SQL (выбор набора результатов).
Также представляется, что использование оператора < BETWEEN
является СУЩЕСТВУЮЩИМ быстрее, чем использование операторов SQL >
"или <
". Он почти в 3 раза быстрее использовал "BETWEEN
", чем использовать инструкцию ">
" и "<
".
С учетом сказанного я по-прежнему считаю, что влияние производительности будет связано с использованием Spatial, поскольку он неясен для меня, если он поддерживается моей версией MySQL (v5.0.24)... а также как я включаю он, если поддерживается.
Любая помощь будет очень восприимчивой