Вы можете использовать только один индекс на таблицу для каждого запроса (если вы не рассматриваете самостоятельные объединения или CTE). если у вас есть несколько, которые можно использовать для одной и той же таблицы в одном запросе, SQL Server будет использовать статистику, чтобы определить, какой из них лучше использовать.
В сценарии 1, если вы создаете индекс только на PracticeCode
, он обычно будет использоваться, если у вас достаточно строк, чтобы сканирование таблицы стоило дороже, и в этом столбце был широкий диапазон значений. Индекс не будет использоваться, если в таблице всего несколько строк (просто взглянуть на них все быстрее). Кроме того, индекс не будет использоваться, если большинство значений в этом столбце совпадают. Он не будет использовать PK в этом запросе, это будет похоже на поиск имени в телефонной книге, вы не можете использовать индекс, потому что это фамилия + имя. Возможно, вы захотите изменить свой ПК на PracticeCode+ControlGroup
, если вы никогда не выполняете поиск в ControlGroup.
В Сценарии 2, если у вас есть индекс для NameOfFile, он, вероятно, будет использовать PK и игнорирует индекс NameOfFile. Если вы не сделаете индекс NameOfFile уникальным, и тогда это бросок. Вы можете попытаться создать индекс (в дополнение к вашему PK) для ControlGroup + PracticeCode + NameOfFile. если у вас много файлов на ControlGroup + PracticeCode, то он может выбрать этот индекс поверх индекса PK.