Настройка индексов в Dynamics AX

Индекс таблицы — это структура, предназначенная для быстрого поиска конкретной записи. Индекс представляет собой упорядоченную коллекцию ключей и указателей на фактические записи. В данной статье рассмотрено понятие, типы, создание и настройка индексов в Dynamics AX.

Что такое индекс?

Индекс — это специфичная для таблицы структура базы данных, которая ускоряет извлечение строк из таблицы. Индексы используются для повышения производительности поиска данных и иногда для обеспечения существования уникальных записей.

После создания индексы автоматически управляются СУБД при каждой вставке, обновлении или удалении записи. В Microsoft Dynamics AX индекс можно включить или отключить. Когда индекс отключен, он удаляется из базы данных и перестраивается, если он будет включен позже.

Индекс определяется одним или несколькими полями. Система пытается упорядочить индекс по первому полю, и если в этом поле имеется более одной записи с одинаковым значением, конфликт сортировки разрешается путем просмотра следующего поля и так далее.

Таким образом, в основном индексы в базах данных используются для поиска записей и хранятся отдельно в базе данных. Они содержат ключ, который можно быстро найти в индексе, и этот ключ будет иметь ссылку на запись.

Типы индексов

Уникальный индекс

Уникальный индекс создается на основе столбца. Microsoft Dynamics AX гарантирует, что в этом же столбце не может быть повторяющихся значений ключей. Также при обновлении столбца, содержащего уникальный индекс, возникнет ошибка.

Первичный индекс

Первичный индекс таблицы — это основной индекс, который используется для уникальной идентификации записей в ней. В этом индексе не допускается дублирование значений, и все поля в индексе являются обязательными. Можно назначить кластерный или обычный индекс в качестве основного индекса. Поскольку первичный индекс является основным, необходимо добиться оптимальной производительности, назначив для этой цели кластерный индекс.

Поля в первичном ключе однозначно идентифицируют записи в любой данной таблице. Каждая уникальная комбинация полей первичного ключа однозначно идентифицирует одну (и только одну) запись в таблице. Первичные ключи должны быть уникальными. В таблице может быть только один первичный ключ. Не все уникальные индексы являются первичными ключами.

Кластерный индекс

Кластерный индекс определяет физический порядок хранения данных в таблице. Допустим, есть кластеризованный индекс в текстовом поле «Имя», и вставляется запись с именем, начинающимся с буквы D, эта запись будет физически вставлена между записями C и E. Кластерные индексы не должны быть уникальными.

Что ж, это означает, что всякий раз, когда выполняется поиск последовательности идентификаторов EmployeeID с использованием этого кластерного индекса, тогда поиск будет намного быстрее из-за того факта, что последовательность идентификаторов сотрудников физически хранится рядом друг с другом на диске — то есть преимущество с кластерным индексом. Это связано с тем, что строки в таблице сортируются в том же порядке, что и кластеризованный индекс, а фактические данные таблицы хранятся в конечных узлах кластеризованного индекса.

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

Некластеризованный индекс

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

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

Создание индексов

Для создания индекса необходимо:

  1. Найти таблицу в AOT.
  2. Щелкнуть правой кнопкой мыши узел «Индексы» в таблице и выбрать «Новый индекс». Новый индекс Index1 создан.
  3. Переименовать индекс в имя поля выбранной таблицы/поля
  4. Перетащить выбранное поле в индекс, созданный на шаге выше узла.

Наименовать индексы рекомендуется следующим образом: использовать имя поля в индексе с постфиксом Idx, если последнее поле не заканчивается на Id. В этом случае достаточно добавить «x» в конце. Например, индекс, содержащий номер заказа на продажу (SalesId), будет наименоваться SalesIdx.

Использование индексов

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

Используйте индексы, где выполняются частые запросы:

  • Столбцы используются в соединениях.
  • Столбцы используются в выражениях where или groupby.
  • Столбцы используются в пунктах order-by.
  • Предложение group-by может быть улучшено путем индексации, когда диапазон сгруппированных значений мал по сравнению с количество строк в выбранной таблице.

Индексы будут ухудшать производительность вставок и обновлений, иногда существенно. Ниже приведены несколько таких случаев:

  • Таблицы с небольшим количеством строк
  • Статические таблицы
  • Колонны с широким диапазоном значений
  • Таблицы менялись часто и с небольшим количеством данных доступ
  • Столбцы, не используемые в операторах выбора запроса доступа к данным

Для использования индексов в коде существуют два оператора index и index hint. В чем заключается отличие между index и index hint?

Index Index hint
При добавлении оператора «index MyIndex», ядро Axapta добавит «ORDER BY» со всеми полями индекса. Добавление оператора «index» к селектору Axapta НЕ означает, что этот индекс будет использоваться базой данных. Это означает, что Axapta отправит «order by» в базу данных. При добавлении оператора «index hint MyIndex», ядро Axapta добавит инструкцию, чтобы указать базе данных использовать этот индекс, а не другой. Используя «index hint», убирается контроль над тем, какой индекс использовать из оптимизатора базы данных. Таким образом, если есть более подходящий индекс, база данных не будет его использовать.

Рекомендации

При поиске записи, SQL Server может подобрать наиболее подходящий индекс или индексы, чтобы использовать для этого конкретного запроса, если понятно, что часто требуется тот же самый набор полей из конкретного запроса, можно создать индекс, который содержит ключи, по которым мы желаем найти, и поля, которые необходимо получить. Это значительно улучшает производительность, так как SQL будет использовать этот индекс и затем может просто вернуть значения, которые уже есть в индексе.

Несколько советов по индексации:

Область Совет
Выбор столбцов таблицы
  • Столбец, который можно легко проиндексировать, должен быть выбран.
  • Числовые значения легче индексировать, чем строки и, следовательно, индексы на целочисленных значениях намного быстрее
  • Если для поля строкового типа необходимо создать индекс, поле должно быть фиксированной ширины.
  • Никогда не создавайте индексы на основе дат.
  • Dynamics автоматически генерирует RecID для большинства таблиц. Индексирование по этому столбцу желательно, если другой столбец не подходит.
Пронумерованные столбцы (для составного ключа) для включения в индекс
  • Попробуйте свести к минимуму использование составных ключей. Если ни один другой столбец не подходит, Recld может быть хорошим выбором.
  • Количество столбцов в индексе должно быть сведено к минимуму, так чтобы критерий поиска были простыми насколько это возможно.
  • Для составного ключа рекомендуется не более трех полей.
Количество индексов
  • Нет ограничения по максимальному количеству индексов на таблице. Тем не менее, рекомендуется, чтобы количество индексов было ограничено теми столбцами, которые часто используется в условиях where, объединениях и упорядочения или группировки в запросах select.
  • Слишком большое количество индексов может повлиять на производительность, поскольку каждая вставка, обновление и удаление приводит к обновлению каждого индекса.
Размер столбца индекса Столбец или комбинация столбцов, на которых основан индекс, известен как ключ. Размер ключа должен быть как можно меньше, чтобы раскрыть преимущества индексации в оптимизации производительности.

Размер ключа может быть уменьшен с помощью:

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

Примечания

  1. Indexes Overview

Литература

  • Simon Buxton Mastering Microsoft Dynamics AX 2012 R3 Programming. — Packt Publishing, 2015 — 419 с. — ISBN 978-1-78217-601-5.
  • Anil Kumar Gupta Quality Assurance for Dynamics AX-Based ERP Solutions. — Packt Publishing, 2008 — 168 с.
  • Erlend Dalen Microsoft Dynamics AX 2009 Programming: Getting Started. — Packt Publishing, 2009 — 348 с. — ISBN 978-1-84719-730-6.
  • David Weiner Dynamics AX: A Guide to Microsoft Axapta. — Apress, 2006 — 472 с. — ISBN 978-1-59059-489-6.

См. также

Comments

So empty here ... leave a comment!

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

Sidebar