Проблема расстановки индексов в таблице с большим числом полей
Здравствуйте товарищи
Исходные данные:
Таблица, профиль пользователя. Схематично поля:
id (PK), a, b, c, d, e, f, g
Задача:
Обеспечить поиск по таблице, причём в качестве входных данных могут быть любые комбинации свойств профиля пользователя
Т.е. например:
выборка 1: a = 1, b = 2
выборка 2: b = 3, c = 4
выборка 3: e = 5, f = 6
(объединение всегда по AND)
Понятно, что на все комбинации всех полей создавать составные индексы - глупо
Придумал вот какое решение (на оригинальность не претендую, даже считаю - что он является своеобразной "лучшей практикой", но так или иначе - ни разу не видел):
Создаём N (по числу свойств) составных индексов вида: `a` + `id`, `b` + `id`, `c` + `id`
Соответственно выборка 1 (см. выше) будет производиться за 2 запроса:
Первым мы выбираем id профилей, у которых a = 1 (используется индекс `a` + `id`)
Вторым - выбираем id профилей, у которых b = 2 и id IN (см. п.1)
Альтернативные варианты? Мнения?
Здравствуйте товарищи
Исходные данные:
Таблица, профиль пользователя. Схематично поля:
id (PK), a, b, c, d, e, f, g
Задача:
Обеспечить поиск по таблице, причём в качестве входных данных могут быть любые комбинации свойств профиля пользователя
Т.е. например:
выборка 1: a = 1, b = 2
выборка 2: b = 3, c = 4
выборка 3: e = 5, f = 6
(объединение всегда по AND)
Понятно, что на все комбинации всех полей создавать составные индексы - глупо
Придумал вот какое решение (на оригинальность не претендую, даже считаю - что он является своеобразной "лучшей практикой", но так или иначе - ни разу не видел):
Создаём N (по числу свойств) составных индексов вида: `a` + `id`, `b` + `id`, `c` + `id`
Соответственно выборка 1 (см. выше) будет производиться за 2 запроса:
Первым мы выбираем id профилей, у которых a = 1 (используется индекс `a` + `id`)
Вторым - выбираем id профилей, у которых b = 2 и id IN (см. п.1)
Альтернативные варианты? Мнения?