Создание атрибутивных индексов
Эта тема относится только к ArcGIS for Desktop Standard и ArcGIS for Desktop Advanced.
Добавление или изменение атрибутивных индексов в базах геоданных ArcSDE не доступно в ArcGIS for Desktop Basic.
Атрибутивные индексы повышают скорость поиска и запросов к атрибутам классов пространственных объектов и таблиц. Атрибутивный индекс - это альтернативный путь, используемый ArcGIS для получения записи из таблицы. Для большинства типов атрибутивных запросов быстрее найти запись по индексу, чем начинать с первой записи и просматривать в таблице все записи подряд.
Как только вы загрузите ваши данные в класс пространственных объектов или таблицу, создайте индексы для тех полей, к которым вы часто производите запросы. Создавайте только нужные индексы, поскольку при добавлении индексов несколько снижается скорость выполнения операции редактирования класса пространственных объектов. Каждый раз, когда вы будете редактировать класс пространственных объектов, ArcGIS будет нужно обновить индексы. Если вам будет нужно часто редактировать данные поля, то не создавайте для него индекс. Вы можете создать атрибутивные индексы в диалоговом окне Свойства (Properties) в ArcCatalog или с помощью инструмента геообработки. Как только индекс будет добавлен, вы сможете удалить его или добавить в любое удобное время.
Атрибутивные индексы могут быть созданы по-разному. Вы можете создать их для одного или нескольких полей; они могут быть уникальными и нет; в случае работы с некоторыми базами геоданных они могут быть также созданы по возрастанию или по убыванию. В данном документе приводится краткое описание этих понятий. Если вы хотите определить оптимальную технологию индексирования базы геоданных ArcSDE, то обратитесь к документации по вашей СУБД.
Создание атрибутивных индексов в ArcCatalog
Вы можете создать атрибутивный индекс для одного или нескольких полей для класса пространственных объектов или таблицы в базе геоданных, если вы щелкните на классе объектов в дереве Каталога (Catalog) и откроете диалоговое окно Свойства (Properties).
- В дереве Каталога щелкните правой кнопкой мыши на таблице или классе пространственных объектов, для которых вы хотите создать индекс, и выберите Свойства (Properties).
- Перейдите на закладку Индексы (Indexes).
- Щелкните Добавить.
- Введите имя для нового индекса.
- Выберите опцию Уникальный (Unique), если значения в вашем поле уникальны. Выберите также опцию Возрастающий (Ascending) для создания индекса по возрастанию.
Опции Уникальный (Unique) и Возрастающий (Ascending) не используются в файловой базе геоданных, и вы можете оставить их невыбранными. Параметр Возрастающий не используются в базах геоданных Oracle ArcSDE. Параметры Уникальный (Unique) и Возрастающий (Ascending) недоступны в базах геоданных SQL Server ArcSDE.
- Выберите поле или поля, для которых вы хотите создать индекс.Примечание:
Составные индексы (сразу на несколько столбцов) не поддерживаются в файловых базах геоданных.
- Нажмите кнопку стрелки вправо, чтобы перенести выбранные поля в список Выбранные поля (Fields selected).
- Используйте стрелки вверх и вниз, чтобы изменить порядок полей в индексе.
- Нажмите кнопку ОК.
- Нажмите кнопку Применить (Apply), чтобы построить индекс, или нажмите кнопку OK, чтобы построить индекс и закрыть диалоговое окно Свойства (Properties).
Создание атрибутивных индексов с помощью геообработки
В группе инструментов Индексы (Indexes) в наборе инструментов Управление данными (Data Management) хранятся инструменты для создания и удаления атрибутивных индексов.
Добавить атрибутивный индекс (Add Attribute Index) производит добавление обычного или составного индекса для существующей таблицы, класса пространственных объектов или атрибутивного класса отношений. Этот инструмент доступен во всех лицензиях ArcGIS.
Удалить атрибутивный индекс (Remove Attribute Index) производит удаление обычного или составного индекса из существующей таблицы, класса пространственных объектов или атрибутивного класса отношений. Данный инструмент будет также доступен во всех лицензиях ArcGIS.
Имена атрибутивных индексов
При вводе имени для индекса в базе геоданных ArcSDE рекомендуется дать индексу осмысленное имя, которое будет отражать, какую таблицу или даже какое поле он индексирует. Однако, если имя индексируемой таблицы будет изменено, то ваш индекс уже не будет указывать на то, какую таблицу он индексирует. В некоторых организациях в имени индекса также указывается то, что это индекс, например, добавляя IDX в конце или в начале имени индекса. Например, индекс для таблицы адресов может иметь имя ADRS_APK_IDX, где ADRS будет указывать на то, что это индекс для таблицы адресов, APK означает имя столбца, которое было индексировано, а IDX означает, что это индекс.
Как и для имен таблиц, для имен индексов в базах геоданных имеются некоторые ограничения ArcSDE:
- Должны быть уникальными в базе данных
- Должны начинаться с буквы
- Не должны содержать пробелов
- Не должны содержать зарезервированных слов
В файловой базе геоданных нет никаких ограничений для имени атрибутивного индекса. В именах индексов в персональных базах геоданных не должно быть пробелов или зарезервированных слов.
В ArcGIS длина имени атрибутивного индекса не должна превышать 16 символов. Это ограничение обусловлено требованиями в других базах данных и призвано упростить процесс переноса данных между различными базами геоданных.
Уникальные индексы
Опция Уникальный (Unique) не используется в файловых базах геоданных, и вы можете оставить ее невыбранной. Опция Уникальный (Unique) также недоступна в базах геоданных ArcSDE в SQL Server и недоступна в диалоговом окне Добавить атрибутивный индекс (Add Attribute Index), если источником данных является класс объектов, зарегистрированный как версионный.
При создании индекса вам предоставляется возможность сделать его уникальным. Выберите эту опцию, если в каждой строке этого столбца хранится уникальное значение. Это позволит ускорить скорость поиска атрибутивного значения, поскольку в базе данных поиск будет остановлен, как только будет найдено первое совпадающее значение.
Обратите внимание на то, что вы не сможете редактировать класс пространственных объектов, у которых имеется уникальный индекс для созданного пользователем поля в персональной базе геоданных. Вы также не сможете редактировать класс пространственных объектов, который хранится в наборе классов объектов вместе с другим классом пространственных объектов с уникальным индексом для созданного пользователем поля. При попытке начать редактирование персональной базы геоданных в ArcMap будет выведено сообщение об ошибке:
Нет слоев, доступных для редактирования. Проверьте, содержит ли слой или таблица уникальный индекс для пользовательского столбца.Если у вас создан уникальный индекс для поля в персональной базе геоданных, и вам нужно отредактировать класс объектов, то используйте ArcCatalog, чтобы удалить этот уникальный индекс и затем создать неуникальный индекс.
Индексы по возрастанию и по убыванию
Опция Возрастающий (Ascending) не используется в файловых базах геоданных и в базах геоданных ArcSDE в Oracle и вы можете оставить ее невыбранной. Опция По возрастанию (Ascending) также недоступна в базах геоданных ArcSDE в SQL Server и недоступна в диалоговом окне Добавить атрибутивный индекс (Add Attribute Index), если источником данных является класс объектов, зарегистрированный как версионный.
При создании индекса вы сможете создать индекс по возрастанию и, если опция не будет выбрана, по убыванию. Возрастающий индекс поддерживается в формате по возрастанию. Например, названия городов Athens, Berlin, London, Paris будут отображены в этом алфавитном порядке в индексе по возрастанию, а в индексе по убыванию эти города будут записаны в обратном порядке - Paris, London, Berlin, Athens.
В большинстве случаев порядок записи в индексе почти не оказывает влияния на скорость обработки запросов, поскольку проход по индексу производится эффективно как по возрастанию, так и по убыванию.
Обычные и составные индексы
В файловых базах геоданных не поддерживаются составные индексы (сразу для нескольких столбцов). В диалоговых окнах Свойства класса пространственных объектов (Feature Class Properties) и Свойства таблицы (Table Properties) вы не сможете создать составной индекс. Инструмент геообработки Добавить атрибутивный индекс (Add Attribute Index) и средства ArcObjects позволят вам создать составной индекс, и хотя созданный вами индекс будет выглядеть как составной в диалоговом окне Свойства класса пространственных объектов (Feature Class Properties) или Свойства таблицы (Table Properties) в ArcCatalog, на самом деле это будут отдельные индексы для каждого из полей.
Индексы в персональной или ArcSDE базе геоданных могут быть созданы как для одной, так и для нескольких колонок (составные). Составные индексы удобны, если вы часто указываете в запросе несколько полей вместе. В этом случае производительность обработки запроса с помощью составного индекса будет выше, чем при использовании двух или трех отдельных индексов для каждого поля.
Порядок, в котором поля отображаются в составном индексе, имеет большое значение. В составном индексе, в котором столбец A предшествует столбцу B, столбец A будет использован для управления первоначальным поиском. Кроме того, такой индекс будет более полезен для запросов, в которых используется только столбец A, чем для запросов, использующих только столбец B.
При принятии решения о создании составных или простых индексов или их комбинации учитываются многие факторы, а лучшее решение редко бывает очевидным. Довольно часто, однако, имеется несколько решений, которые подойдут. Например, если вы иногда производите запрос только к столбцу A и иногда только к столбцу B, а иногда к обоим столбцам, то вы могли бы:
- Создать два отдельных индекса для столбцов A и B.
- Создать составной индекс для столбцов A и B. Использование данного индекса будет несколько эффективнее при обработке запросов к данным из обоих столбцов. При выполнении запросов только к столбцу A, этот индекс будет обеспечивать меньшую скорость, чем отдельный индекс по столбцу A. Этот индекс будет мало использоваться в запросах, включающих только B. Зато вы можете создать дополнительный индекс для B.
- Создать все три индекса: индекс для столбца A, индекс для столбца B и составной индекс для столбцов A и B. Это было бы эффективное решение, если все три типа запросов производятся одинаково часто, и запросы к таблице производятся чаще, чем редактирование ее данных.