Мои более низкие знания SQL (Server 2008) ограничены, и сейчас наши администраторы баз данных сталкиваются с проблемой. Позвольте мне объяснить (я упомянул очевидные заявления в надежде, что я прав, но если вы видите что-то не так, скажите мне) сценарий:
У нас есть таблица, которая содержит "Приказы суда" для людей. Когда я создал таблицу, (Name: 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 = ...
Затем я применил индекс CLUSTERED для PersonId. Причина состояла в том, чтобы группировать заказы для определенного человека физически, поскольку подавляющее большинство работ получает заказы на человека. Итак, select from mytable where personId = ...
Я сейчас подтянулся. Мне сказали, что мы должны поместить кластеризованный индекс на первичный ключ и нормальный индекс на personId. Мне это очень странно. Во-первых, почему вы кладете кластерный индекс в уникальный столбец? что это кластеризация? Неужели это пустая трата кластеризованного индекса? Я бы поверила, что обычный индекс будет использоваться в уникальном столбце. Кроме того, кластеризация индекса будет означать, что мы не можем группировать другой столбец (по одному на таблицу, правда?).
Мне говорят, что я ошибся в том, что, полагая, что кластеризованный индекс в PersonId сделает медленные вставки. Для 5% -ного увеличения скорости выбора мы получим 95% -ное снижение скорости при вставках и обновлениях. Это верно и верно?
Они говорят, что, поскольку мы кластер personId, SQL Server должен переставлять данные, когда мы вставляем или вносим изменения в PersonId.
Итак, я спросил, почему SQL должен иметь концепцию CLUSTERED INDEX, если это так медленно? Это так медленно, как они говорят? Как мне настроить свои индексы для достижения оптимальной производительности? Я бы подумал, что SELECT используется больше, чем INSERT... но они говорят, что у нас есть проблемы с блокировкой на INSERTS...
Надеюсь, кто-то может мне помочь.