ArcGIS применяет пространственные индексы для увеличения производительности выполнения пространственных запросов к классам объектов. Определение пространственного объекта, выбор объектов путем наведения и растягивания окна, а также перемещение и масштабирование – все это обязывает ArcGIS Pro использовать пространственный индекс для поиска объектов.
При создании пустого класса пространственных объектов или импорте данных с целью создания класса объектов в базе геоданных из ArcGIS в классе пространственных объектов создается пространственный индекс. Пространственный индекс используется при запрашивании и редактировании данных.
Примечание:
Исключением является Db2. Когда вы создаете пустые классы объектов в базе геоданных в Db2, пространственные индексы не создаются.
Типы пространственных индексов
Пространственные индексы работают по-разному в зависимости от типа источника данных. Классы пространственных объектов в базах геоданных следующих типов используют систему сеток (гридов) в качестве пространственных индексов:
- Файловые базы геоданных
- Базы геоданных в Db2
- Базы геоданных в Oracle, если класс объектов содержит поле Esri ST_Geometry
Классы объектов в Oracle, содержащие данные типа Oracle Spatial (SDO_Geometry), используют пространственные индексы R-tree.
Классы объектов в PostgreSQL используют индексы упрощенного дерева поиска (Generalized Search Tree - GiST).
Классы объектов в Microsoft SQL Server, содержащие пространственный столбец Geometry or Geography, используют модифицированный пространственный индекс B-tree. Пространственный индекс для столбца Geometry хранит также координаты ограничивающего прямоугольника. См. документацию Microsoft SQL Server для получения информации об ограничивающем прямоугольнике.
Управление пространственным индексом в ArcGIS
Способ создания и перестроения пространственных индексов в ArcGIS зависит от типа базы геоданных, а для многопользовательских баз геоданных - может быть различным, в зависимости от используемой СУБД. В двух следующих разделах описаны различия в функциональных возможностях.
Пространственные индексы в файловых базах геоданных
- При создании класса объектов в ArcGIS создаются пространственные индексы.
- При копировании вами класса объектов из базы геоданных в файловую базу геоданных, пространственный индекс копируется вместе с данными, если исходный класс объектов использует индекс, основанный на сетке (Oracle Esri ST_Geometry, Db2 или файловая база геоданных). Если же у исходных данных индекс другого типа, в выходной файловой базе геоданных пространственный индекс будет перестроен.
- Сжатые классы пространственных объектов файловых баз геоданных не используют тот же самый тип пространственного индекса, который используется несжатыми классами пространственных объектов. При сжатии класса пространственных объектов файловой базы геоданных автоматически происходит его переиндексация. Данный индекс не может быть изменен. При отмене сжатия класса пространственных объектов тот пространственный индекс, который был у сжатого ранее класса пространственных объектов, автоматически устанавливается заново.
Пространственные индексы в многопользовательских базах геоданных
В следующих списках описывается, как ArcGIS управляет пространственным индексом класса объектов базы геоданных всех поддерживаемых СУБД:
- Db2
- При создании класса объектов в ArcGIS не создаются пространственные индексы.
- При сохранении изменений объектов в классе без пространственного индекса этот индекс будет создан.
- При копировании вами класса объектов из базы геоданных в базу геоданных Db2, пространственный индекс копируется вместе с данными, если исходный класс объектов использует индекс, основанный на сетке (Oracle Esri ST_Geometry, Db2 или файловая база геоданных). Если же у исходных данных индекс другого типа, в выходной файловой базе геоданных Db2 будет создан пространственный индекс, основанный на скопированных объектах.
- Oracle
- При создании класса объектов в ArcGIS создаются пространственные индексы.
- При сохранении изменений объектов в классе без пространственного индекса этот индекс будет создан.
- При копировании вами класса объектов из базы геоданных в базу геоданных Oracle пространственный индекс копируется вместе с данными, если исходный класс объектов использует индекс, основанный на сетке (Oracle Esri ST_Geometry, Db2 или файловая база геоданных). Если же у исходных данных индекс другого типа, в выходной файловой базе геоданных Oracle будет создан пространственный индекс, основанный на скопированных объектах.
- PostgreSQL
- При создании класса объектов в ArcGIS создаются пространственные индексы.
- При сохранении изменений объектов в классе без пространственного индекса этот индекс будет создан.
- При копировании вами класса объектов из базы геоданных в базу геоданных PostgreSQL, ArcGIS создает пространственный индекс класса объектов PostgreSQL на основе скопированных объектов.
- SQL Server
- При создании класса объектов в ArcGIS создаются пространственные индексы.
- При сохранении изменений объектов в классе без пространственного индекса этот индекс создан не будет.
- При копировании вами класса объектов из базы геоданных в базу геоданных SQL Server, ArcGIS создает пространственный индекс класса объектов SQL Server на основе скопированных объектов.
- SAP HANA не применяет пространственные индексы для производительности запросов, поэтому ArcGIS не создает и не поддерживает индексов.
Когда обновляется пространственный индекс?
Для классов объектов SQL Server с пространственным типом Geometry пространственный индекс использует ограничивающий прямоугольник, который нужно обновлять вручную при вставке и удалении объектов. Чтобы определить необходимость пересчета пространственного индекса для класса объектов SQL Server, воспользуйтесь операцией Проверить в диалоговом окне Свойства класса объектов .
Для остальных баз геоданных и пространственных типов вам редко понадобится управлять пространственным индексом. Однако если вы наблюдаете снижение производительности пространственных запросов после добавления или удаления большого количества объектов вы можете заменить улучшения производительности выполнения пространственного запроса, если выперестроите (в Oracle) или заново создадите пространственный индекс соответствующего класса объектов.