Как кластерный и некластерный индекс делает поиск быстрее?
Кластерные индексы физически упорядочивают данные на диске.
Скажем, у меня есть таблица 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 ответ
Рассмотрим гораздо больший набор данных - не четыре значения, а миллион. Запросы через индекс могут действительно иметь небольшие накладные расходы, связанные с необходимостью выполнить другое чтение из таблицы, как только будет найдено правильное физическое местоположение, но для больших наборов данных это незначительно, если учесть, насколько быстрее поиск по индексу по сравнению с выполнением полного сканирования на несортированном столе.