Как кластерный и некластерный индекс делает поиск быстрее?

Кластерные индексы физически упорядочивают данные на диске.

Скажем, у меня есть таблица employee и columd employee_id. Теперь я храню ценности 9, 6, 10, 4 под employee_id. с кластеризованным индексом на employee_id. Значения на диске будут храниться в отсортированном виде, то есть 4, 6, 9, 10. Теперь, если я выполняю поиск по employee_id с идентификатором 9, база данных может использовать алгоритм поиска, такой как двоичный поиск, или другой, чтобы быстро найти запись с идентификатором 9. Так что его возможно, это не оштрафует запись за одну операцию, как с бинарным поиском.Это верно?

Некластеризованный индекс Некластеризованный индекс содержит дубликаты данных из проиндексированных столбцов, упорядоченных вместе с указателями на фактические строки данных (указатели на кластеризованный индекс, если он есть). Так что, если взять тот же пример, что и выше. В этом случае база данных создаст отдельный объект для хранения данных вместе с местом в памяти. Что-то вроде этого

9 - его физическое расположение

6 - его физическое расположение

10 - его физическое расположение

4 - его физическое расположение

Итак, сначала мне нужно найти 10 во вновь созданном объекте и получить его место в памяти. Затем вернитесь в оригинальную область памяти. Так почему же это делает поиск быстрее?

Также, насколько я понимаю, индекс должен быть создан для столбца, включенного в предложение where, а не в предложение select. Правильно?

1 ответ

Рассмотрим гораздо больший набор данных - не четыре значения, а миллион. Запросы через индекс могут действительно иметь небольшие накладные расходы, связанные с необходимостью выполнить другое чтение из таблицы, как только будет найдено правильное физическое местоположение, но для больших наборов данных это незначительно, если учесть, насколько быстрее поиск по индексу по сравнению с выполнением полного сканирования на несортированном столе.

Другие вопросы по тегам