Наличие поля строкового массива в качестве индекса, хорошо это или плохо?

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

Строка расширяет тип четырьмя элементами массива, причем не все они всегда заполнены. Мне нужно обосновать, почему бы не установить это поле в качестве одного из индексов. Я пробовал искать ответы, читать блог Кимберли Триппс, знакомиться с передовыми методами индексации в MSDN (в котором упоминается только, что индексы лучше всего подходят для числовых значений, а затем для строковых полей) и т. д. Но ни в одном из них не упоминается индексирование таблицы в поле. это тип массива. Какие причины я могу привести, чтобы оправдать отказ от индексации поля строкового массива. И если моя интуиция совершенно неверна и индексы хорошо работают с полями массива, то почему?


person Celeste    schedule 11.04.2011    source источник
comment
Если вы найдете ответ полезным, пожалуйста, примите ответ.   -  person Jan B. Kjeldsen    schedule 19.09.2011


Ответы (3)


Поле Memo или Container не может быть частью индекса в AX.

Кроме того, столбцы, состоящие из типов данных ntext, text или image, нельзя указать в качестве столбцов для индекса в SQL Server.

person 10p    schedule 11.04.2011
comment
Я ошибся, поле является не контейнером, а строковым значением, расширяющим ExtentedDataType элементами массива. Я отредактировал свой вопрос. Спасибо, что указали на это. - person Celeste; 11.04.2011

Допустим, у вас есть расширенный тип данных ArrElement с тремя дополнительными элементами массива ArrElement2, ArrElement3, ArrElement4. Создание индекса с полем типа ArrElement в AX эффективно создаст индекс с 4 полями (ArrElement, ArrElement2, ArrElement3 и ArrElement4 — именно в таком порядке) в SQL Server. Вы не можете изменить порядок элементов массива в индексе, но, на мой взгляд, нет ничего плохого в наличии такого индекса, если он действительно служит вашей цели. Надеюсь это ответит на твой вопрос.

person 10p    schedule 11.04.2011

Как отметил @10p, добавление, скажем, Dimension в качестве единственного поля, создаст индекс всех элементов массива: Dimension, Dimension2_, Dimension3_ (которые являются именами полей таблицы SQL).

Значение такого индекса будет зависеть от выполняемых запросов. Если запрашивается только Dimension[3], то индекс не имеет значения, поскольку Dimension[1] и Dimension[2] неизвестны.

Это можно решить, создав индекс для каждого из элементов массива, например:

  • Dim1Idx: Dimension[1] (можно добавить дополнительные поля)
  • Dim2Idx: Dimension[2] (можно добавить дополнительные поля)
  • Dim3Idx: Dimension[3] (можно добавить дополнительные поля)

Отдельные элементы массива можно выбрать с помощью поля со списком в поле индекса.

Значение таких индексов должно быть взвешено по отношению к добавленной стоимости вставки (и обновления, если значения массива изменены).

person Jan B. Kjeldsen    schedule 28.07.2011