Почему в sql-сервере должен быть создан только один кластерный индекс для таблицы?

Я прочитал советы о базе данных SQL Server на http://www.sql-server-performance.com/2007/clustered-indexes

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

Мой вопрос:

* Почему только один кластерный индекс для таблицы должен быть создан на сервере sql? *

6 ответов

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

Зачем заботиться о кластеризованном индексе? Если мы помещаем кластерный индекс в таблицу, то данные извлекаются намного быстрее, потому что сервер sql не должен читать все данные - зависит от запроса. Но поиск данных намного быстрее.

ПРИМЕЧАНИЕ. Хотя вы можете создать более одного индекса без кластеризации в одной таблице.


Это просто решение для внедрения SQL Server. Теоретически, может быть любое количество индексов кластеризации. MongoDB и MyISAM не имеют индексов кластеризации и хранят данные в плоском файле. В InnoDB для MySQL есть один индекс кластеризации, первичный ключ, который может быть скрыт, если первичный ключ не объявлен. TokuDB для MySQL и TokuMX (оба из которых я работаю) позволяют пользователям иметь несколько индексов кластеризации, при этом неявный компромисс - это больше дискового пространства, используемого для более быстрых запросов.


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

Вот почему вы не можете указывать включенные столбцы в кластерном индексе - потому что по своей природе все столбцы уже включены.


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

Чтобы создать другой кластерный индекс в той же таблице, измените параметр свойства Create as Clustered в существующем кластерном индексе перед созданием второго индекса.


ВЫ МОЖЕТЕ! (Косвенно)

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


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

http://msdn.microsoft.com/en-us/library/aa933131.aspx

licensed under cc by-sa 3.0 with attribution.