Это кажется странным вопросом. Я знаю разные типы индексов в sql-сервере (кластерный, некластеризованный, уникальный, отфильтрованный, индекс с включенными столбцами и т. Д.), И я знаю, как их создавать. Также я знаю, что индекс зависит от запроса, но я не знаю, кто выбирает столбец при создании индекса. Например, предположим, что простой веб-сайт позволяет пользователям публиковать текст и изображения. Сайт имеет простой две таблицы, изображенные на картинке:Как выбрать столбцы при создании индекса?
запрос, получить пользователя в веб-сайт:
Select UserID,UserName from User where Email='something' and Password='something'
Предположим, что я хочу создать индекс для этой таблицы, какой столбец (ы), которые я должен включить в создание индекса? Я знаю, что разные типы индексов могут включать разные столбцы, но кто я могу решить при создании кластеризованных или некластеризованных столбцов, которые должны быть выбраны. Я вижу несколько примеров индексов, которые почти всегда выбирают столбец после предложения where. Это правда ?
Запрос, который получает сообщения пользователь:
Select * from Posts where UserID='something'
Этот запрос отличается от первого запроса. Этот запрос может возвращать несколько строк, в то время как первый всегда будет возвращать одну строку. Теперь тот же вопрос, как выбрать столбец?
То, что я хочу сказать, как выбрать столбцы, когда:
- Создание кластерного индекса.
- Создание некластеризованного индекса.
- Создание некластеризованных включенных столбцов.
Приведенный выше пример является лишь иллюстрацией идеи вопроса. Цель состоит не в том, чтобы найти хороший индекс для двух запросов в примере, а для создания базы, которая может использоваться для выбора столбцов при создании индекса.
Для запроса: SELECT UserID, UserName От пользователя WHERE Email = 'something' AND Password = 'something'; Как вы говорите, мы можем индексировать электронную почту и пароль, а также включать идентификаторы пользователя и имя пользователя в столбцы, включенные в индекс. Если UserID индексируется с помощью кластерного индекса, нужно ли включать идентификатор пользователя в качестве включенного столбца в некластеризованный индекс? Что происходит здесь для ключевого поиска? –
Если 'UserID' - ваш кластерный индекс, вы не должны его включать. Вы можете попробовать оба. –
Но для выполнения поиска по-прежнему необходимо выполнить поиск ключа, чтобы найти UserName. Что я говорю правду? –