Какую базу данных выбрать для поиска наиболее подходящих записей?

Я храню объект в базе данных, который описывается множеством целочисленных атрибутов. Реальный объект немного сложнее, но пока предположим, что я храню автомобили в своей базе данных. У каждого автомобиля есть множество целочисленных атрибутов для описания автомобиля (т. Е. Максимальная скорость, колесная база, максимальная мощность и т. Д.), И они доступны для поиска пользователем. Пользователь определяет предпочтительный диапазон для каждого из объектов, и, поскольку атрибутов много, скорее всего, не будет автомобиля, соответствующего всем диапазонам атрибутов. Следовательно, запрос должен возвращать количество автомобилей, отсортированных по наилучшему совпадению.

На данный момент я реализовал это в MySQL, используя следующий запрос:

SELECT *, SQRT( POW((a < min_a)*(min_a - a) + (a > max_a)*(a - max_a), 2) +
                POW((b < min_b)*(min_b - b) + (b > max_b)*(b - max_b), 2) +
                ... ) AS match
WHERE a < (min_a - max_allowable_deviation) AND a > (max_a + max_allowable_deviation) AND ...
ORDER BY match ASC

где a и b - атрибуты объекта, а min_a, max_a, min_b и max_b - значения, определенные пользователем. Обычно совпадение представляет собой квадратный корень из суммы квадратов разностей между желаемым диапазоном и реальным значением атрибута. Значение 0 означает идеальное совпадение.

Таблица содержит пару миллионов записей, а клаузула WHERE введена только для ограничения количества записей, для которых выполняется вычисление. Индекс помещается на все запрашиваемые записи, и запрос занимает около 500 мс. Я бы хотел улучшить это число, и я ищу способы улучшить этот запрос.

Кроме того, мне интересно, будет ли другая база данных, более подходящая для выполнения этой работы. Более того, я бы очень хотел перейти на базу данных NoSQL из-за более гибких вариантов схемы данных. Я искал MongoDB, но не смог найти способ эффективно (быстро) решить эту проблему.

Есть ли база данных, лучше подходящая для этой работы, чем MySQL?

5
задан OMG Ponies 24 July 2011 в 01:32
поделиться