Должен ли порядок столбца в предложении where совпадать с порядком индекса?

8

Я читал этот 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 реорганизует их в соответствии с определением индекса?

Спасибо !!

уравнительный
источник
3
Разве план выполнения от вашего теста не отвечает на вопрос?
ypercubeᵀᴹ
Да !! Но я хотел получить экспертное заключение, и в некоторых случаях это может не сработать. Спасибо !!
Эгалитарный
1
Аналогичный вопрос для MySQL: В MySQL влияет ли порядок столбцов в предложении WHERE на производительность запроса? Оптимизатор SQL-сервера на несколько уровней выше, чем MySQL.
ypercubeᵀᴹ

Ответы:

13

Итак, мой вопрос: имеет ли значение порядок столбцов в предложении Where?

Нет. Порядок столбцов в WHEREпредложении не имеет значения вообще.

a_horse_with_no_name
источник
10

Прежде всего, DROPутверждение в окне запроса явно не было выполнено, но для пояснения я попытаюсь ответить на ваш вопрос.


Думайте об индексах так же, как о телефонной книге: записи сортируются по фамилии, а затем по имени. (Это порядок индекса ключа .)

Если я попрошу вас найти все номера телефонов людей с фамилией «Дэвис», вы перейдете на соответствующую страницу и прочитаете номера. (Это индексный поиск .)

Если я попрошу вас найти все номера телефонов людей с именем «Дженис», вам нужно будет просмотреть каждую страницу, чтобы найти их все. (Это сканирование индекса .)

Если я дам вам как имя, так и фамилию, вы сможете найти эту запись очень быстро, как и в первом примере, поскольку очевидно, что вы будете использовать фамилию для поиска нужной страницы, а затем имя для найти точную запись. Не имеет значения, в каком порядке я дал вам информацию, если я дал вам имя и фамилию.

Оптимизатор запросов SQL Server работает так же. На основе порядка ключей индекса он автоматически определяет наиболее эффективный способ получения запрашиваемых данных независимо от порядка условий в WHEREпункте.

Джон Сайгель
источник
Отличное объяснение сканирования индекса и поиска индекса.
Neelam
0

Порядок столбцов в индексе имеет значение, но не в порядке порядковых значений в whereпредложении.

Гастон Санчес
источник