Я читал этот use-the-index-luke.com, который подробно объясняет, как работают индексы. Одна из вещей, которые этот человек повторил, это то, что порядок индексов имеет большое значение, и чтобы сделать запрос быстрым, столбцы предложения where должны быть такими же, как в индексе. Сегодня я только что подтвердил эту теорию и создал таблицу (id int, name nvarchar (100)) в SQL Server 2008. Я вставил в нее около 5000 строк и создал индекс
create index abc on test (name, id )
и запустил запрос
select ID, name
from test
where ID = 10
and name = '10'
Я ожидал, что после полного сканирования таблицы последует выбор в плане запроса, но, к моему удивлению, результатом плана стало сканирование индекса с последующим выбором.
Итак, мой вопрос: порядок столбцов в предложении Where имеет значение или SQL Server реорганизует их в соответствии с определением индекса?
Спасибо !!
источник
Ответы:
Нет. Порядок столбцов в
WHERE
предложении не имеет значения вообще.источник
Прежде всего,
DROP
утверждение в окне запроса явно не было выполнено, но для пояснения я попытаюсь ответить на ваш вопрос.Думайте об индексах так же, как о телефонной книге: записи сортируются по фамилии, а затем по имени. (Это порядок индекса ключа .)
Если я попрошу вас найти все номера телефонов людей с фамилией «Дэвис», вы перейдете на соответствующую страницу и прочитаете номера. (Это индексный поиск .)
Если я попрошу вас найти все номера телефонов людей с именем «Дженис», вам нужно будет просмотреть каждую страницу, чтобы найти их все. (Это сканирование индекса .)
Если я дам вам как имя, так и фамилию, вы сможете найти эту запись очень быстро, как и в первом примере, поскольку очевидно, что вы будете использовать фамилию для поиска нужной страницы, а затем имя для найти точную запись. Не имеет значения, в каком порядке я дал вам информацию, если я дал вам имя и фамилию.
Оптимизатор запросов SQL Server работает так же. На основе порядка ключей индекса он автоматически определяет наиболее эффективный способ получения запрашиваемых данных независимо от порядка условий в
WHERE
пункте.источник
Порядок столбцов в индексе имеет значение, но не в порядке порядковых значений в
where
предложении.источник