Я пытаюсь понять, как индексирование в SQL Server может помочь повысить производительность запроса на выборку.
Насколько я понимаю, структура b-дерева используется сервером sql при индексировании.
Ниже приведен простой пример.
Day (Primary Key) Race Winner
1 Dave
2 Jill
3 Jake
…
199 Jody
200 Sam
Таким образом, номер дня является нашим первичным ключом. В качестве фона используется структура, как показано ниже (или что-то подобное — просто изображение, которое я нашел). Итак, если вы хотите запросить победителя гонки на 50-й день, я вижу, что с помощью приведенной ниже структуры его можно быстро найти, выполнив следующие действия:
Начните с корня> следующий 1–100> следующий 1–50, а затем войдите в лист 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? При запросе данных выше я бы использовал столбцы «Дата и идентификатор» в условии «где», поэтому AutoID кажется бессмысленным?