У меня есть вопрос относительно передового опыта для индексирования в SQL Server (или любой РСУБД, если на то пошло). Возьмем следующую таблицу:Перекрытие обложки и одиночных индексов в SQL Server
ProfileID int
Text nvarchar(50)
ProfileID
присоединяется к Profile
таблице. Для каждого профиля каждый Text
должен быть уникальным. Поэтому я поместил основной ключ на оба столбца. Хорошо.
Однако, я также хочу иметь возможность запросить приведенную выше таблицу на ProfileID
. Поэтому я также добавил индекс на ProfileID
.
Это означает, что у меня есть перекрывающий индекс. Я не знаю, является ли это общей суммой отходов, поскольку уже есть индекс обложки, или если это правильно, поскольку индекс обложки будет хешем из двух столбцов (или я неправильно понимаю индексы покрытия)?
Edit:
Я создал индекс в порядке (ProfileID, Text)
. Что, если для аргументации было 3 столбца A, B и C, которые имели индекс обложки по всем 3. Было бы полезно, если бы мы запросили «A» или «A, B и C», но не «B», или «C», или «B и C»?
@Quassnoi Это звучит, как вы говорите, индекс крышка * частично * помочь запрос к ProfileID, но не так хорошо, как независимый индекс по этой колонке будет. – IamIC
@IanC: составной индекс будет больше по размеру, и он * может * взять дополнительное время, чтобы пройти его. Поскольку меньшее количество узлов вписывается в одну страницу, глубина индекса может быть больше. Для поиска узла с составным индексом может потребоваться поиск на странице «5», где просто «2» или «3» будет достаточно простого. – Quassnoi
Также обратите внимание, что то, что вы создаете, не является индексом покрытия в строгом смысле слова. В индексе покрытия закрытые столбцы не сортируются или не используются в поиске. – Quassnoi