У меня есть таблица с (среди прочего) 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, но я никогда не работал с пространственными типами данных и пространственными независимостями.