Page 81 - 6430
P. 81
запису в базі даних. Індексація організовує дані в пошукове
дерево, по якому можна швидко переміщатися, щоб швидко
знайти певний запис. PostgreSQL за замовчуванням підтримує
три види індексів: індекси B-Tree, індекси R-Tree й індекси GiST.
B-Tree (B-дерева) використовуються, коли дані можуть
бути розсортовані уздовж однієї осі; наприклад, числа, символи,
дати. Дані ГІС не можуть бути раціональним способом
відсортовані уздовж однієї осі (що більше: (0,0) або (0,1) або
(1,0)?), А тому для їх індексування B-Tree не допоможуть.
R-Tree (R-дерева) розбивають дані на прямокутники, під-
прямокутники, під-під-прямокутники та т.д. R-Tree
використовуються в деяких просторових базах даних для
індексації даних ГІС, але в PostgreSQL реалізація R-Tree не
настільки надійна, як реалізація GiST.
Індекси GiST (Generalized Search Trees - узагальнені дерева
пошуку) розділяють дані на "об'єкти по одну сторону" ("things to
one side"), "пересічні об'єкти" ("things which overlap"), "об'єкти
всередині" ("things which are inside ") і можуть бути використані
для багатьох типів даних, включаючи дані ГІС. PostGIS
використовує реалізацію R-Tree поверх GiST для індексації даних
ГІС.
Індекси GiST
GiST означає "узагальнене пошукове дерево" ("Generalized
Search Tree") і є загальною формою індексації. Крім індексації
ГІС, GiST використовується для прискорення пошуку для всіх
видів нерегулярних структур даних (цілочисельні масиви,
спектральні дані і т.д.), до яких не застосовується звичайне
індексування B-Tree.
Коли таблиця даних ГІС виростає до декількох тисяч
записів, створення індексів необхідно для прискорення пошуку
просторових даних (крім випадків, коли весь ваш пошук
грунтується атрибутах. Тоді вам достатньо звичайних індексів
полів атрибутів).
Нижче описаний синтаксис запиту для створення GiST-
індексу стовпчика "geometry":
CREATE INDEX [indexname] ON [tablename] USING GIST
([geometryfield]);
Створення просторового індексу вимагає інтенсивних
81