Мои знания SQL на более низком уровне (Server 2008) ограничены, и теперь наши администраторы баз данных оспаривают их. Позвольте мне объяснить (я упомянул очевидные утверждения в надежде, что я прав, но если вы видите что-то не так, скажите мне) сценарий:
У нас есть стол, в котором хранятся «Судебные приказы» для людей. Когда я создал таблицу (Имя: CourtOrder), я создал ее так:
CREATE TABLE dbo.CourtOrder
(
CourtOrderID INT NOT NULL IDENTITY(1,1), (Primary Key)
PersonId INT NOT NULL,
+ around 20 other fields of different types.
)
Затем я применил некластеризованный индекс к первичному ключу (для эффективности). Мои причины заключаются в том, что это уникальное поле (первичный ключ), и его следует индексировать, в основном для целей выбора, поскольку мы частоSelect from table where primary key = ...
Затем я применил КЛАСТЕРНЫЙ индекс для PersonId. Причина заключалась в том, чтобы сгруппировать заказы для конкретного человека физически, так как подавляющее большинство работы - это получение заказов для человека. Так,select from mytable where personId = ...
Меня сейчас на этом остановили. Мне сказали, что мы должны поместить кластерный индекс на первичный ключ, а нормальный индекс на personId. Мне это кажется очень странным. Во-первых, зачем помещать кластерный индекс в уникальный столбец? что это за кластеризация? Неужели это пустая трата кластерного индекса? Я бы подумал, что нормальный индекс будет использоваться для уникального столбца. Кроме того, кластеризация индекса означает, что мы не можем кластеризовать другой столбец (по одному на таблицу, верно?).
Причина, по которой мне сказали, что я совершил ошибку, состоит в том, что они считают, что кластеризованный индекс для PersonId замедлит вставку. При 5% -ном приросте скорости выбора мы бы получили 95% -ное снижение скорости при вставках и обновлениях. Это правильно и верно?
Они говорят, что, поскольку мы группируем personId, SQL Server должен переупорядочивать данные, когда мы вставляем или изменяем PersonId.
Тогда я спросил, почему в SQL должна быть концепция КЛАСТЕРИРОВАННОГО ИНДЕКСА, если он такой медленный? Это так медленно, как они говорят? Как мне настроить индексы для достижения оптимальной производительности? Я бы подумал, что SELECT используется больше, чем INSERT ... но они говорят, что у нас проблемы с блокировкой INSERTS ...
Надеюсь, кто-нибудь может мне помочь.