Это хорошая практика, чтобы вручную создавать индексы для первичных ключей? - PullRequest
0 голосов
/ 28 мая 2019

Я недавно работаю с Entity Framework Core, и у меня возникла проблема с отношением между первичным ключом и индексами.

Чтобы быть более конкретным, я обнаружил, что в таблице, содержащей составные первичные ключи,Для второго свойства ключа создан индекс.

Вы можете увидеть пример здесь

Можете ли вы объяснить мне, если я должен вручную создать другой индекс для первого?Или для этого первого свойства создан кластерный индекс?

Ответы [ 2 ]

2 голосов
/ 28 мая 2019

Как правило, индекс для набора столбцов может использоваться, даже если запрос выполняет поиск только в некоторых столбцах, с ограничением, что запрос должен запрашивать столбцы из индекса слева направо, без пробелов

Таким образом, если набор столбцов 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

1 голос
/ 28 мая 2019

Вам не нужно создавать индекс для NoteID, потому что это первый столбец первичного ключа.Как правило, вы хотите, чтобы все внешние ключи были первым столбцом хотя бы в одном индексе.В вашем случае NoteID - это первый столбец первичного ключа, который действует как кластеризованный уникальный индекс.

...