Как правило, индекс для набора столбцов может использоваться, даже если запрос выполняет поиск только в некоторых столбцах, с ограничением, что запрос должен запрашивать столбцы из индекса слева направо, без пробелов
Таким образом, если набор столбцов A, B, C, D проиндексирован, этот индекс все еще можно использовать для ответа на запросы, которые фильтруются по A
, A and B
, A and B and C
.
Таким образом, выне нужно индексировать NoteID отдельно, потому что индекс, который помогает первичному ключу (NoteID, CategoryID), может использоваться запросами, вызывающими только NoteID.Однако его нельзя использовать для ответа на запросы, требующие только CategoryID, следовательно, создается отдельный индекс
В качестве отступления, вы можете обнаружить, что в некоторых случаях вы можете указывать значения в предложении where, которое имеетнет другой цели, кроме как поощрять использование индекса, который их охватывает.Предположим, например, что таблица имеет индекс на Name, Gender, Age
, и вы хотите, чтобы все 20-летние люди звали Стивен.Если вы можете обоснованно утверждать, что Стивен всегда мужчина, вы можете WHERE Name = 'Steven' AND Gender = 'M' AND Age = 20
- даже несмотря на то, что Gender of M является избыточным, если указать его, то механизм БД будет использовать этот индекс.Отказ от этого означает, что БД будет гораздо сложнее выяснить, использовать индекс или нет
Вы также можете изменить порядок упорядочения индексов, чтобы помочь вашему приложению работать, и дать БД меньше индексов для обслуживания.Если все ваши запросы будут когда-либо запрашивать только A, A + C или A + B + C, было бы лучше указать индекс для столбцов в порядке A, C, B, тогда один индекс может охватывать все запросы,вместо того, чтобы поддерживать индекс A + B + C и другой из A + C