Индексирование в SQL Server - PullRequest
       28

Индексирование в SQL Server

2 голосов
/ 01 апреля 2009

Что такое кластерная и некластерная индексация? Как проиндексировать таблицу с помощью sql server 2000 Enterprise manager?

Ответы [ 4 ]

3 голосов
/ 01 апреля 2009

В индексе clustered для ID строки таблицы упорядочены по ID.

В non-clustered индексе ID ссылки на строки таблицы упорядочены по ID.

Мы можем сравнить базу данных с CSV файлом:

ID,Value
-------
1,ReallyReallyLongValue1
3,ReallyReallyLongValue2

В таблице clustered, когда мы вставляем новую строку, нам нужно сжать ее между существующими строками:

ID,Value
-------
1,ReallyReallyLongValue1
2,ReallyReallyLongValue2
3,ReallyReallyLongValue3

, что медленно при вставке, но быстро при извлечении.

В таблице non-clustered мы храним отдельный индексный файл, который упорядочивает наши строки:

Id,RowNumber
------------
1, 1
3, 2

Когда мы вставляем новую строку, мы просто добавляем к нашему основному файлу и обновляем файл краткого индекса:

ID,Value
-------
1,ReallyReallyLongValue1
3,ReallyReallyLongValue3
2,ReallyReallyLongValue2

Id,RowNumber
------------
1, 1
2, 3
3, 2

, что быстро при вставке, но менее эффективно при извлечении.

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

Кластерные индексы быстрее на SELECT, некластеризованные индексы быстрее на INSERT / UPDATE / DELETE

2 голосов
/ 01 апреля 2009

Кластерный индекс определяет, как хранится фактическая таблица. Строки хранятся таким образом, чтобы быстро выполнять поиск по полям в кластерном индексе. (Они физически хранятся не в порядке сортировки полей индекса, а в двоичном дереве или в чем-то подобном.)

Вы можете иметь только один кластерный индекс на таблицу. Кластерный индекс содержит все поля в таблице, например:

   indexfield1 - indexfield2 - field2 - field3 - ....

Некластеризованный индекс похож на отдельную таблицу. Он содержит поля в индексе и ссылку на поля в таблице. Например:

  secondindexfield1 - secondindexfield2 - reference to table row

При поиске в некластеризованном индексе сервер SQL найдет значение в индексе, выполнит «поиск закладок» в таблице и извлечет из нее другие поля строк. Вот почему некластеризованные индексы работают немного хуже, чем кластерные индексы.

Чтобы добавить индекс в SQL Server Management Studio, разверните узел таблицы в представлении объекта. Щелкните правой кнопкой мыши «Индексы» и выберите «Новый индекс».

2 голосов
/ 01 апреля 2009

Кластерный индекс означает, что строки физически упорядочены по значениям в этом индексе. Некластеризованный индекс означает, что таблица индексов обновляется, что позволяет осуществлять быстрый поиск и сортировку по значению, но физически не упорядочивает строки.

Для таблицы может существовать только один кластерный индекс, и если существует первичный ключ, то это кластерный индекс (в SQL Server).

0 голосов
/ 01 апреля 2009
  • Кластерный индекс: допускается только один кластерный индекс на таблицу. Если индекс кластеризован, это означает, что таблица, на которой основан кластеризованный индекс, физически отсортирована в соответствии с этим индексом. Подумайте о номерах страниц в энциклопедии.

  • Некластеризованный индекс: может иметь много некластеризованных индексов на таблицу. Подумайте об индексе ключевых слов в конце книги.

...