Руководство по PostGIS4.5. Построение индексов |
||
Индексы делают возможным использование пространственной базы данных для больших наборов данных. Без индексации, любой поиск приводил бы к "последовательному сканированию" каждой записи в базе данных. Индексация организовывает данные в поисковое дерево, по которому можно быстро перемещаться, чтобы быстро найти конкретную запись. PostgreSQL по умолчанию поддерживает три вида индексов: индексы B-Tree, индексы R-Tree и индексы GiST.
4.5.1. Индексы GiSTGiST означает "обобщенное поисковое дерево" ("Generalized Search Tree") и является общей формой индексации. Кроме индексации ГИС, GiST используется для ускорения поиска для всех видов нерегулярных структур данных (целочисленные массивы, спектральные данные и т.д.), к которым неприменимо обычное индексирование B-Tree. Когда таблица данных ГИС вырастает до нескольких тысяч записей, создание индексов необходимо для ускорения поиска пространственных данных (кроме случаев, когда весь ваш поиск основывается атрибутах. Тогда вам достаточно обычных индексов полей атрибутов). Ниже описан синтаксис запроса для создания GiST-индекса столбца "geometry":
Создание пространственного индекса требует интенсивных вычислений: для таблицы размером 1 миллион строк на машине Solaris 300MHz создание индекса заняло около 1 часа. После создания индекса важно заставить PostgreSQL собрать табличную статистику, которая используется для оптимизации запросов:
В PostgreSQL индексы GiST имеют два преимущества перед R-Tree. Во-первых, индексы GiST являются "null-безопасными" ("null safe"). Это означает, что они могут индексировать столбцы, содержащие значения null. Во-вторых, индексы GiST поддерживают концепцию "потерь" ("lossiness"), которая имеет значение, когда объекты ГИС занимают больше 8К (размер страницы PostgreSQL). Потери позволяют PostgreSQL сохранять в индексе только "значимую" часть объекта. В случае объектов ГИС, ими являются охваты. R-Tree не может быть создан для объектов ГИС, занимающих больше 8K. 4.5.2. Использование индексовКак правило, индексы ускоряют доступ к данным оставаясь при этом прозрачными: как только индекс создан, планировщик запросов самостоятельно решает, использовать ли индексную информацию для создания быстрого плана запроса. К сожалению, планировщик запросов в PostgreSQL неоптимально использует индексы GiST. Так, иногда, там, где при поиске должен использоваться пространственный индекс, используется последовательное сканирование всей таблицы выполняемое по умолчанию. Если вы обнаружили, что ваши пространственные индексы не используются (впрочем, как и индексы атрибутов), есть пара вещей, которые вы можете сделать:
Последнее обновление: August 14 2008 |
© GIS-Lab и авторы, 2002-2008. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна.