Я провел небольшое исследование по порядку столбцов индекса, но не уверен на 100%, поэтому, пожалуйста, несите меня на этом! У меня есть следующая таблица:Порядок столбцов в индексе - производительность вставки
CREATE TABLE [Valuation]
(
[ValuationID] [int] IDENTITY(1, 1)
NOT NULL
CONSTRAINT [PK_Valuation] PRIMARY KEY ,
VersionID INT NOT NULL ,
AlphanumericIdentifier VARCHAR(255) NOT NULL,
...
other columns
...
)
я много присоединяется к этой таблице другим на VersionID и AlphanumericIdentifier, поэтому я ставлю индекс на нем:
CREATE NONCLUSTERED INDEX [IX_Valuation] ON [dbo].[Valuation]
(
[VersionID] ASC,
[AlphanumericIdentifier] ASC
)
Два вопроса:
- Эти объединения обычно выполняются для определенного идентификатора версии, поэтому это самый избирательный столбец и должен быть первым в индексе - правильно?
- Вкладыши всегда выполняются для одной версии, что на 1 больше, чем у последней версии. Это должно уменьшить влияние производительности на вставки, поскольку вставленные строки являются «куском», который можно добавить в конец индекса. Это правильно?
Я уверен, что я прав 1, но 2 правильно?
Благодаря Джо
Вы используете столбец идентичности для чего-нибудь? Уникальна ли комбинация версии VersionID + Alphenumericidentifier? Возможно, вам стоит рассмотреть PK для двух столбцов, а не в столбце идентификации, если он фактически не будет использоваться. –
Похоже, что 'VersionID' должен быть PK (и идентификатором) – Lamak
VersionID + Alphenumericidentifier не уникальны. Они ** должны быть уникальными в сочетании с другим полем varchar, но я не могу ввести уникальный индекс на данном этапе проекта из-за риска. Но звучит неплохо, если я могу вернуться назад ... Еще одно ограничение - мне нужно отправить уникальный идентификатор стороннему поставщику в файл. Это будет до 10 + 255 + 255 = 560 символов, что, вероятно, вызовет проблемы на их стороне. На данный момент мы просто отправляем им int PK, который может содержать только до 10 символов – nonpoliticaltag