Как эффективно хранить непрерывные переменные в MySQL - PullRequest
0 голосов
/ 12 февраля 2011

Я знаком с тем, как индексация работает в SQL, но, насколько я понимаю, индексация не работает с непрерывными переменными (такими как широта / долгота, цены, время и т. Д.).

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

  1. Существуют ли мои предложенные методы в sql?
  2. Есть ли еще более быстрое решение для хранения и поиска непрерывных переменных?

Ответы [ 2 ]

1 голос
/ 13 февраля 2011

Индексирование отлично работает с непрерывными переменными и реализует его аналогично тому, как вы предлагаете. Индексы хранятся в дереве B +, а листья дерева в порядке. Поэтому, если вы выполняете запросы с диапазоном, они выполняются очень быстро, так как они могут последовательно сканировать листья дерева.

Существуют различные способы, с помощью которых SQL может реализовать это для повышения производительности, но в большинстве случаев по умолчанию работает довольно хорошо.

Лат / Лонг - это отдельная история, потому что вы запрашиваете два измерения. Например Вы можете запросить все магазины в пределах 100 миль от конкретного лат / долгота. Эти типы полей лучше всего хранить в R-дереве. Большинство СУБД реализуют это в дополнение к деревьям B +.

0 голосов
/ 12 февраля 2011

Полагаю, это зависит от типа запроса, который вы хотите оптимизировать.

Предположим, вы всегда хотите SELECT ... ORDER BY price таблицу, которая в основном постоянна: вы можете использовать ALTER TABLE ... ORDER BY col, чтобы упорядочить (т.е. сократить время) для последующих запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...