Как и во всех вопросах оптимизации СУБД, это зависит от вашего механизма исполнения.
Я бы начал с самого простого сценария, четырех отдельных индексов на каждый из столбцов.
Это обеспечитлюбые запросы, использующие эти столбцы таким образом, которого вы не ожидали, будут по-прежнему работать нормально (индекс fieldx/fieldy/field1
будет бесполезен для запроса, использующего только fieldy
).
Любой механизм достойного выполнения будет работать эффективносначала выберите индекс с наименьшим количеством элементов, чтобы уменьшить результирующий набор, а затем выполните другие фильтры на основе этого.
Затем и только , если у вас есть проблемы с производительностью, вы можете посмотретьв улучшение его с различными показателями.Вы должны тестировать производительность на данных производственного типа, а не на любых тестовых базах данных, которые вы сами создали (если они в любом случае не отражают атрибуты производства).
И помните, что настройка базы данных редко бывает заданной и забываемойоперация.Вам следует периодически перенастраиваться, потому что производительность зависит как от схемы , так и от данных, которые вы храните.
Даже если схема никогда не меняется, данные могут сильно отличаться.В ответ на ваш комментарий «Я просто не могу экспериментировать, применяя индексы и объясняя запрос», это ровно , что вы должны делать.
Если вы беспокоитесь по поводу игры на производстве (и вам следуетбыть), у вас должна быть настроена другая среда с аналогичными спецификациями, скопируйте в нее производственные данные, а затем возьмите ваши индексы там.