Является ли хорошей идеей всегда определять кластеризованный индекс в таблице базы данных? - PullRequest
4 голосов
/ 25 июля 2011

В настоящее время я смотрю на проблему с производительностью широко используемой системы .NET CMS, и у меня есть конкретная таблица с приблизительно 5 000 000 записей в ней, которая является основной причиной этих проблем, просто запрос содержимого этой таблицы занимает до2 минуты в локальной среде разработки.

Глядя на схему для таблицы, я заметил, что существует только один уникальный некластеризованный индекс и нет кластеризованного индекса.

Таблица и индекс определены следующим образом

CREATE TABLE [dbo].[MyTable](
    [Id] [uniqueidentifier] NOT NULL,
    [ItemId] [uniqueidentifier] NOT NULL,
    [Language] [nvarchar](50) NOT NULL,
    [FieldId] [uniqueidentifier] NOT NULL,
    [Value] [nvarchar](max) NOT NULL,
    [Created] [datetime] NOT NULL,
    [Updated] [datetime] NOT NULL
)


CREATE UNIQUE NONCLUSTERED INDEX [IX_Unique] ON [dbo].[MyTable] 
(
    [ItemId] ASC,
    [Language] ASC,
    [FieldId] ASC
)

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

Спасибо

Ответы [ 3 ]

3 голосов
/ 25 июля 2011

Я не думаю, что вы можете сказать «всегда» хорошо или плохо.

У вас есть план объяснения для запроса, который не выполняется?

если предложение where в этом запросе не использует индексированные столбцы, то дополнительный индекс может существенно помочь.

1 голос
/ 25 июля 2011

Я согласен с Рэнди в том, что это зависит от того, для чего стол будет использоваться в первую очередь. Эта - отличная статья о «дебатах по кластерному индексу».

Здесь слишком много, чтобы подвести итог, но в целом INSERT всегда быстрее с кластерным индексом, UPDATE * обычно быстрее, а SELECT больше зависит от других факторов, таких как покрытие некластеризованных индексов.

0 голосов
/ 26 июля 2011

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

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

проверьте эту ссылку MSDN для получения подробной информации о кластеризованном индексе

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