Нужно ли иметь индекс для каждой комбинации запрашиваемых полей в таблице SQL для оптимизации производительности?

Если моя таблица User имеет несколько полей, которые можно запросить (например, DepartmentId, GroupId, RoleId), будет ли разница в скорости, если я создам индекс для каждой комбинации эти поля?

Под «запрашиваемым» я имею в виду экран запроса, где конечный пользователь может выбирать записи на основе отдела, группы или роли, выбирая из раскрывающегося списка.

На данный момент у меня есть индекс для DepartmentId, GroupId и RoleId. Это единственный неуникальный индекс для каждого поля.

Если конечный пользователь выбирает «любого из группы B», SQL выглядит так:

select * from User where GroupId = 2

Наличие индекса в GroupId должно ускорить это.

Но если конец пользователь выбирает «любой в группе B и в роли C», SQL будет выглядеть так:

select * from User where GroupId = 2 and RoleId = 3

Наличие индексов по GroupId и RoleId по отдельности может не иметь никакого значения, верно?

Лучшим индексом для этого поиска будет, если У меня был один индекс, охватывающий как GroupId, так и RoleId.

Но если это так, то это будет означать, что мне понадобится индекс для каждой комбинации запрашиваемых полей. Поэтому мне понадобятся все эти индексы:

  • DepartmentId
  • GroupId
  • RoleId
  • DepartmentId и GroupId
  • DepartmentId и RoleId
  • GroupId и RoleId
  • Department Id, GroupId и RoleId

Может кто-нибудь пролить некоторый свет на это? Я использую MySQL, если это имеет значение.

7
задан sohtimsso1970 27 July 2011 в 21:12
поделиться