Путать между кластеризованным и некластеризованным индексом.Содержит 5 сомнений - PullRequest
2 голосов
/ 03 сентября 2010

Работают ли кластерные и некластеризованные индексы на B-Tree? Я читал, что кластеризованные индексы влияют на способ физического хранения данных в таблице, тогда как для некластеризованных индексов создается отдельная копия столбца, которая сохраняется в отсортированном порядке. Кроме того, Sql Server по умолчанию создает кластерные индексы для первичного ключа.

Означает ли это:

1) Некластеризованные индексы занимают больше места, чем кластеризованные индексы, так как отдельная копия столбца хранится в некластеризованных?

2) Как работает кластерный и некластеризованный индекс, когда у нас есть первичный ключ, основанный на двух столбцах: .. (StudentName, Marks)?

3) Есть только 2 типа индексов? Если так, то что такое растровые индексы? Кажется, я не могу найти такой тип индекса в Sql Server Management Studio, но в моей книге по хранилищу данных упоминаются все эти типы.

4) Эффективно ли создание кластеризованного или некластеризованного индекса для первичного ключа?

5) Предположим, мы создаем кластерный индекс по имени, т. Е. Данные физически сохраняются в отсортированном порядке имени, а затем создается новая запись. Как новая запись найдет свое место в таблице?

Заранее спасибо:)

1 Ответ

2 голосов
/ 03 сентября 2010

Индексы - это структуры, которые хранятся отдельно от реальных страниц данных и просто содержат указатели на страницы данных. В SQL Server индексы являются B-деревьями.

Кластерные индексы сортируют и сохраняют страницы данных в таблице в соответствии со столбцами, определенными для индекса. В SQL Server 2005 вы можете добавить дополнительные столбцы в индекс, чтобы не было проблем при наличии составных первичных ключей. Вы можете думать о кластерном индексе как о наборе шкафов с папками. В первом розыгрыше у вас есть документы, начинающиеся с A, а в первой папке этого розыгрыша у вас могут быть документы, начиная с AA до AC и так далее. Чтобы найти «Spider», вы можете сразу перейти к розыгрышу S, найти папку, содержащую «SP», и быстро найти то, что вы ищете. Но очевидно, что если вы физически сортируете все документы по одному индексу, то вы не можете физически отсортировать один и тот же набор документов по другому индексу. Следовательно, только один кластерный индекс на таблицу.

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

  1. Да, индекс занимает место, но не так сильно, как исходная таблица. Вот почему вы должны тщательно выбирать свои индексы. Существует также небольшое снижение производительности для операций обновления, поскольку индекс должен поддерживаться.

  2. Ваша книга затронет все теоретические типы указателей. Растровые индексы полезны в приложениях хранилищ данных или для данных, которые имеют несколько различных значений, таких как дни недели и т. Д. Таким образом, они обычно не используются в вашей основной СУБД. Я знаю, что у Oracle есть некоторые реализации, но я мало что знаю об этом.

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

  4. При вставке индекс должен поддерживаться, поэтому система должна сделать немного больше, чтобы немного переставить вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...