MySQL пространственная скорость данных - PullRequest
3 голосов
/ 11 апреля 2011

У меня есть таблица с (среди прочего) x и y полями типа SMALLINT и pt типа POINT, установленными в POINT (x, y);
x и y имеют нормальные значения, а pt имеет заданный пространственный индекс.

Профилирование типового запроса

select sql_no_cache
    count(0) from `table_name`
    where (x between -50 and 50)
    and (y between -50 and 50);
-- vs
set @g = GeomFromText('Polygon((-50 -50, 50 -50, 50 50, -50 50, -50 -50))');
select sql_no_cache
    count(0) from `table_name`
    where MBRContains(@g, `pt`);

... показывает, что запрос через x и y в 1,5 раза быстрее:
3,45 ± 0,10 мс против 4,61 ± 0,14 мс для 10 запросов.
x и y всегда будут INT, и будут запрошены только прямоугольные (даже квадратные) области. Да, это высечено в камне; -)

Основной вопрос:
Я что-то упустил из-за неопределенности или пространственные данные в этом случае излишни?

  • Версия MySQL 5.1.37
  • Тип БД: MyISAM (по умолчанию)
  • Текущий размер таблицы - 5 тыс. Строк, 10-30 тыс. Планируется в производстве.

У меня был некоторый опыт работы с MySQL, но я никогда не работал с пространственными типами данных и пространственными независимостями.

1 Ответ

1 голос
/ 04 сентября 2011

У вас есть комбинированный x & y INDEX на столе? Если так, то да, это очень быстро. Я считаю, что пространственные индексы имеют более широкое применение. Структура многоугольника может иметь много вершин, и прямоугольник является единственным случаем более общей конструкции.

Если прямоугольной граничной области достаточно для ваших нужд, я бы скорее предложил вам воспользоваться решением для полей x и y, чем добавлять сложность функций пространственного расширения.

...