Включенные столбцы (Included Columns) в Dynamics AX 2012

Включенные столбцы (Included Columns) — это функция SQL Server (начиная с версии 2005), связанная с индексами. Благодаря этому вы можете добавить  дополнительные поля в индекс, которые не используются для поиска (поэтому они не будут такими затратными), но которые могут использоваться сервером баз данных для возврата данных. Если все столбцы, возвращаемые запросом, включены в индекс, сервер базы данных может напрямую возвращать данные, и ему не нужно касаться самой таблицы (и это, конечно, экономит время).

Включенные столбцы также имеют дополнительные преимущества:

  • могут быть добавлены в уникальный индекс без влияния на уникальность
  • поддержка некоторых типов, которые не могут использоваться в «нормальных» индексах
  • не учитываются в количестве полей индекса (максимум 16)
  • не учитываются в размере индекса (максимум 900 байт)

Применяются следующие (логические) ограничения:

  • всегда в конце индекса
  • индекс должен содержать хотя бы один «нормальный» (ключевой) столбец
  • невозможно использовать в кластерных индексах

Конечно, даже включенные столбцы влияют на размер индекса, поэтому они могут замедлять операции с индексом и потреблять дисковое пространство.

     Поддержка в Dynamics AX 2012

Создать включенный столбец в AX2012 очень просто. Добавьте поле в индекс так же, как обычно, а затем измените свойство IncludedColumns столбца индекса на Yes.

На рисунке показан конкретный пример в AX2012 – index TransIdIx в таблице CustInvoiceTrans. Он имеет три «нормальных» поля, полезных для поиска и два дополнительных поля (Qty и QtyPhysical) для покрытия некоторых запросов к этим полям.

Аналогичным образом можно расширить даже уникальные индексы. Например, можно создать индекс с уникальным полeм Id и добавить поле Name, которое часто запрашивается. Хотя такой индекс все еще может быть назначен в качестве основного (этого не может быть, если второе поле не будет включенным столбцом), но синхронизация базы данных не выполнится. Таким образом, уникальные индексы с включенными столбцами не будут работать в качестве основного.

Хотя AX и позволяет переключать свойство IncludedColumn в любом поле, любая недопустимая конфигурация, естественно, отклонится SQL Server во время синхронизации.

     Отображение

Вы также можете воспользоваться поддержкой включенных столбцов для отображения. Например, может потребоваться перечислить сведения обо всех индексах в модуле. В классе DictIndex можно использовать следующие методы:

  • int numberOfIncludedColumns()
  • FieldId includedColumn(int _inclColumnIdx)

Есть проблема с автоматически сгенерированным индексом RecId. Это также видно на следующем изображении: AX возвращает правильное количество включенных столбцов для других индексов (1 и 0), но 35888 включенных столбцов в индекс RecId — это какая-то бессмыслица. Более того, каждый прогон возвращает другое значение – похоже, что AX читает неправильный адрес памяти – но кто знает?

Включенные столбцы, безусловно, стоит использовать – без них, вы либо будете использовать запросы с неполным покрытием, либо сделаете полноценные (и дорого поддерживаемые) индексы. Иногда включенные столбцы могут помочь вам даже уменьшить количество необходимых индексов.

Но это не означает, что вы можете начать бездумно добавлять столбцы в индексы – обслуживание включенных столбцов также имеет свои затраты.

Ссылка на источник: http://dev.goshoom.net/en/2012/04/included-columns-in-ax2012/

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar