xBB – бесплатные скрипты PHP и доки для вебмастеров | |||||||||||||
ДокументацияМетки (все метки)bbcode, html, php, xbb, базы данных, интернет, компьютер, программирование, сайт, софт
Подписаться через RSS2Email.ru
|
4.5. Построение индексовИндексы делают возможным использование пространственной базы данных для больших наборов данных. Без индексации, любой поиск приводил бы к "последовательному сканированию" каждой записи в базе данных. Индексация организовывает данные в поисковое дерево, по которому можно быстро перемещаться, чтобы быстро найти конкретную запись. PostgreSQL по умолчанию поддерживает три вида и индексов: индексы B-Tree, индексы R-Tree и индексы GiST.
4.5.1. Индексы GiSTGiST означает "Обобщенное поисковое дерево" ("Generalized Search Tree") и является общей формой индексации. Кроме индексации ГИС, GiST используется для ускорения поиска на всех видах нерегулярных структур данных (целочисленные массивы, спектральные данные и т.д.), к которым неприменимо обычное индексирование B-Tree. Когда таблица данных ГИС вырастает до нескольких тысяч записей, вы нуждаетесь в создании индексов для ускорения поиска пространственных данных (кроме случаев, когда весь ваш поиск основывается атрибутах. Тогда вам достаточно обычных индексов на полях атрибутов). Ниже описан синтаксис запроса для создания GiST-индекса на столбце "geometry": CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] ); Создание пространственного индекса требует интенсивных вычислений: на таблице в 1 миллион строк на машине Солярис 300MHz создание индекса заняло у нас около 1 часа. После создания индекса важно заставить PostgreSQL собрать табличную статистику, которая используется для оптимизации планов запросов: VACUUM ANALYZE [table_name] [column_name]; -- Это необходимо только для PostgreSQL 7.4 и более старых SELECT UPDATE_GEOMETRY_STATS([table_name], [column_name]); В PostgreSQL индексы GiST имеют два преимущества перед R-деревьями. Во-первых, индексы GiST являются "null-безопасными" ("null safe"). Это означает, что они могут индексировать столбцы, содержащие значения null. Во-вторых, индексы GiST поддерживают концепцию "неоднозначности" ("lossiness"), которая имеет значение, когда объекты ГИС зханимают больше 8К (размер страницы PostgreSQL). Неоднозначность позволяет PostgreSQL сохранять в индексе только "значимую" часть объекта. В случае объектов ГИС, это есть границы. Объекты ГИС, занимающие болше 8K, вызывают провал попыток создать идекс на основе R-дерева. 4.5.2. Использование индексовКак правило, индексы ускоряют доступ к данным оставаясь при этом незримыми: как только индекс создан, планировщик запросов самостоятельно решает, использовать ли индексную информацию для создания быстрого плана запроса. К сожалению, планировщик запросов в PostgreSQL неоптимально использует хорошие индексы GiST. Так, иногда, там, где при поиске должен использоваться пространственный индекс, используется умолчальное последовательное сканирование всей таблицы. Если вы находите, что ваши пространственные индексы не используются (впрочем, как и индексы атрбутов), есть пара вещей, которые вы можете сделать:
Последнее редактирование: 2008-04-07 14:48:53 Метки материала: PostGIS, индексы, GiST, база данных, PostgreSQL, B-Tree, R-Tree, ГИС Оставьте свой комментарий: |
||||||||||||
© 2007-2010, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.