Я пытаюсь понять, как индексирование в SQL Server может помочь повысить производительность выбранного запроса.понимание структуры первичного ключа по нескольким столбцам
Так что я понимаю, что b-tree-структура используется sql-сервером при индексировании.
Ниже приведен простой пример.
Day (Primary Key) Race Winner
1 Dave
2 Jill
3 Jake
…
199 Jody
200 Sam
Таким образом, номер дня является нашим первичным ключом. На заднем плане используется структура, подобная приведенной ниже (или нечто подобное - только изображение, которое я нашел). Поэтому, если вы хотите запросить победителя гонки на 50-й день, я могу увидеть, используя приведенную ниже структуру, можно быстро найти, выполнив следующие действия:
Начать с корня> next 1 - 100> next 1 - 50 & then входит в лист 25-50, где я считаю, что он будет искать по строкам данные в этом листе, пока не найдет 50-й день. Является ли содержащееся здесь значение 50 & указателем на строку, которая содержит остальную часть данных в этой строке?
Так что я могу видеть, как этот пример быстрее, чем поиск всей таблицы. Но я искал, где у меня есть таблица (упрощенный), как показано ниже,
Date ID SEC ID AutoID
10th Jan 2015 ABC A123 1
10th Jan 2015 ABC A344 2
10th Jan 2015 DEF A123 3
10th Jan 2015 GHJ A344 4
20th Feb 2015 ABC A123 5
20th Feb 2015 ABC A344 6
20th Feb 2015 DEF A123 7
20th Feb 2015 GHJ A344 8
Так что я могу использовать все 3 колонки, чтобы создать первичный ключ (естественный ключ) или люди упоминали, используя столбец идентификаторов т.е. суррогата ключ.
Здесь я теряюсь.
Как индексировать хранить эти данные и иметь возможность быстро восстановить их, как в первом примере? Ключевое значение «10th Jane 2015 ABCA123» на самом деле ничего не значит (я, вероятно, ошибочно предполагаю, что здесь происходит - я считаю, что индекс объединяет три столбца для создания уникального значения, которое он помещает в индексную таблицу) , В первом примере наше значение индекса фактически означало что-то для данных, т. Е. Число дней.
Я также не понимаю, как sql-сервер будет использовать AutoID? Когда вы запрашиваете данные выше, я бы использовал столбцы ID & в условии where, поэтому AutoID кажется бессмысленным?
Это напоминает мне об этом http://stackoverflow.com/q/32182339/5089204 – Shnugo
Да, ответ на этот вопрос помог мне принять решение использовать три столбца для моего первичного ключа. Здесь я пытаюсь понять, что происходит, то есть как хранятся данные. – mHelpMe
@mxix - бессмыслица. Первичный ключ - это уникальное ограничение, которое не допускает null. * По умолчанию * первичный ключ также будет кластеризованным индексом, но это * только * по умолчанию. Нет требования, чтобы PK был кластеризованным индексом. –