http://www.sqlservercentral.com/articles/Stairway+Series/72284/Изменение порядка столбцов в составном индексе?
Я читаю эту статью sqlservercentral, где они запрашивают ее использование.
SELECT *
FROM Person.Contact
WHERE FirstName = 'Helen'
AND LastName = 'Meyer';
GO
и для того, чтобы сделать вышеуказанный поиск быстрее, они создали следующий указатель.
CREATE NONCLUSTERED INDEX FullName
ON Person.Contact
(LastName, FirstName);
GO
Я не могу понять, где мы имеем первое имя, а затем фамилию. и в индексе это противоположный порядок (фамилия, имя)
Как это имеет значение здесь, когда мы создаем составной индекс. Я знаю, что фамилия будет отсортирована сначала, а затем будет отсортировано первое имя.
Я проверил статистику, создав индекс в обоих направлениях (имя, фамилия) и (имя, фамилия).
(lastname, firstname) подход немного быстрее, я хочу знать, ПОЧЕМУ, где порядок заказа и порядок столбцов индекса противоположны?
В случае, не имеет значения, в каком порядке находится индекс. Тот, который у вас есть для поиска по запросу ('LastName, FirstName'), когда оба указаны, и работает одинаково хорошо при поиске, в котором указывается только' LastName '. Однако: это будет ** не ** помощь, если вы ищете только «FirstName». Чтобы работать с составным индексом, вы должны указать n самых левых столбцов индекса в разделе 'WHERE' (здесь: 1 или 2 слева). –
@marc_s Если я создаю составной индекс на 5 столбцах 'Comp_IX (col1, col2, col3, col4, col5)', то либо я могу указать все 5 столбцов, либо оставить только '' col1', поэтому он будет искать индекс, mi right ? –
@ VishwanathDalvi: если у вас есть такой индекс, вы можете искать в 'col1', или' col1' и 'col2', или' col1' и 'col2' и' col3' - и так далее. Но вы ** не можете ** искать только на 'col3', или на' col2' и 'col5' - в каждом WHERE должны быть включены ** n самых разных столбцов ** (как указано в определении индекса) ** пункт ** - в противном случае индекс бесполезен –