Использование индексов R-дерева для непространственных данных в MySQL - PullRequest
3 голосов
/ 21 ноября 2011

Я обновляю базу данных инвентаризации и хотел бы ускорить запросы. Основная часть сортировки состоит из 2 столбцов, каждый из которых является диапазоном. Например.

SELECT ....
WHERE price BETWEEN 10.50 AND 34.20 
AND date BETWEEN 1311264060 AND 1313942460
ORDER BY stockNo LIMIT 100

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

У меня была идея притвориться, что цена и данные были осями x и y, и заполнить столбец пространственных данных, а также использовать пространственный поиск MySQLs и индексы R-TREE для извлечения данных.

У кого-нибудь есть опыт R-TREES? Это может дать мне ускорение?

1 Ответ

2 голосов
/ 26 ноября 2011

R-деревья лучше всего подходят для данных, где измерения имеют одинаковое значение, например, географические координаты, и вы выполняете оконные запросы, например запросы диапазона.

Ваши данные, вероятно, имеют несколько эффектов, которые могут повредитьдеревья, например, что цены будут иметь только несколько дискретных значений, а диапазоны дат не будут иметь совершенно другой масштаб.Многие стратегии оптимизации R-дерева, такие как «объем» и «площадь», не имеют особого смысла, когда они фактически вычисляют произведение разницы в цене и разницы во времени.

Хотя R-дерево все еще может работать,Но вам, вероятно, лучше с kB-деревьями и подобными расщепляющимися деревьями.Не уверен, что в MySQL есть что-то подобное, я так не думаю (обычно в нем отсутствуют все расширенные функции).

...