#sql-server #sql-server-2008 #indexing
#sql-сервер #sql-server-2008 #индексирование
Вопрос:
Я пытаюсь найти его в Google через пару часов, и мне все еще не ясно.
В чем разница между:
Create Index NonClusteredComposit_IDX ON Table(id,quantity,price)
Create Index NonClusteredCompositAndInclude_IDX ON Table(id) Include (price,quantity).
Только для индекса lvl.
Я понимаю, как они работают и даже когда их использовать.
Но я не могу понять, как данные хранятся внутри некластеризованного compositandinclude_idx?
Что изменится в этой схеме, где: Индексная страница содержит индексированные данные (идентификатор, количество, цена) и указатель на RID (когда таблица представляет собой кучу) или указатель на страницу в B-дереве (для B-дерева / кластеризованных таблиц).
Из документации я знаю, что когда я включаю столбцы, данные сохраняются в конечном узле, но я не вижу никакой разницы между этим и обычным индексом в (1,2,3), если мы говорим об архитектуре внутри индекса.
Может ли кто-нибудь описать мне различия в архитектуре индекса? Спасибо!
Комментарии:
1. Разница между вашими двумя индексами сводится к тому, какие данные включены в индекс как часть ключа индекса и просто включены как данные на конечных узлах.
2. В индексе без включения хранится только указатель на кластеризованный индекс (или идентификатор строки кучи) — в основном указатель на полную строку. В индексе с включением, а не указателем на всю строку (требуется поиск по закладке), хранятся только включенные данные.
Ответ №1:
При первом подходе сортировка будет производиться по этим трем атрибутам — id, количество, цена
Во втором подходе сортировка будет производиться только по «id», но этот «id» содержит значения «количество, цена», следовательно, для получения соответствующих атрибутов не требуется выполнять поиск по ключу или поиск по rid.
Чтобы проиллюстрировать это, если вы создаете нижеприведенные индексы в одной из таблиц, в обеих выполняется поиск по индексу, но если вы проверяете количество прочитанных строк, оно отличается при извлечении из отсортированных данных, а второй подход выполняет полное сканирование выбранного «идентификатора»
При проверке количества операций чтения для первого индекса…
При проверке количества операций чтения для 2-го индекса оказывается, что он выполняет полное сканирование индекса на предмет искомых данных, следовательно, вы получаете 188 записей
Комментарии:
1. Это то, что я искал! Спасибо, Канннан
2. Добавлены подробности с иллюстрацией
3. Отличный ответ.