У меня есть таблица из 10 миллионов строк product
с такими полями, как color (int), price (float), weight (float), unitprice (int),
и т. Д. Теперь пользователи из Интернета динамически генерируют запросы для поиска данных из этой таблицы со случайными условиями (здесь обязательно должен быть цвет) и по порядку, например
select * from product where color=1 and price >5 and price <220 and .... order by unitprice limit 75, 25;
select count(*) from product where color=3 and weight <500 and price <30 ... ;
Как проиндексировать таблицу (InnoDB или NDB) примерно с 10 возможными полями фильтрации (с диапазоном, сортировкой ...), как это в MySQL?
РЕДАКТИРОВАТЬ: Насколько я понимаю, MySQL, скорее всего, выберет только один индекс для запроса, и только левая часть составного индекса будет работать. Очевидно, что индексирование всех возможных комбинаций не является приемлемым вариантом, например (color, price, weight, create_date, unitprice, ....)
, (color, weight, price, create_date, unitprice, ....)
, (color, unitprice, weight, ....)
.... Не все условия обязательно присутствуют во всех запросах.
Что бы вы сделали, чтобы проиндексировать эту таблицу?