2016-12-06 2 views
0

Я работаю с поисковыми запросами геометрии mysql, и все это работает нормально. однако, когда я пытаюсь вернуть расстояние в метрах (как сгенерированный столбец), а затем заказываю его ближе всего к самому дальнему, это увеличивает время. Ближе к 14 секундам в наборе данных 100k.Созданный индекс MySql, содержащий динамические данные?

как указано distance_in_meters является сгенерированным col и не индексируется. есть способ индексировать этот сгенерированный столбец, хотя данные, которые будут в нем, всегда будут разными? Помогло бы индексирование этого столбца?

+0

Вам действительно нужно рассчитать его для всех строк? Если вы хотите ограничить результаты, скажем, в пределах 100 миль. тогда WHERE ABS (широта1, широта2) <3 и ABS (longitude1, longitude2) <3 ограничили бы количество строк, где вам приходилось делать полный расчет. – Alan

ответ

0

Индекс по дизайну является «статическим». То есть, если ничего не меняется внутри таблицы, индекс не нужно изменять. Внешние изменения не влияют на индекс.

Ваша задача: «Я нахожусь в (лат, lng), где находятся 10 ближайших кафе». (X, y) - это внешние данные, необходимые для вычисления «ближайшего» (т. Е. Расстояния). Вы запрашиваете динамический индекс. Итак, «нет».

Задача может быть помогло по INDEX(latitude) (или долготе), но это приводит его вниз от полной сканирования таблицы для сканирования значительного куска таблицы. Это может быть «достаточно хорошим» для строк 100K.

Если вы выросли до намного большего количества строк и/или вы стали привязаны к вводу/выводу (из-за небольшой ОЗУ), тогда вам понадобится мой blog.

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