Любой метод в PostgreSQL для создания записей с несколькими индексами на одном уровне - PullRequest
0 голосов
/ 25 апреля 2020

Я индексирую некоторые пространственные объекты в PG, и в настоящее время я использую PG с PostGis для построения R-дерева. Однако некоторые объекты слишком велики, чтобы их можно было проиндексировать, поэтому я хочу сначала разбить их на более мелкие части и проиндексировать их по более мелким частям.

Однако я прочитал документ Gist и обнаружил, что нигде нет разделить (на уровне индекса) один элемент данных, если я сначала не разделю их в исходном отношении.

Есть ли способ решить эту проблему в Gist? Или есть какие-то другие рамки для решения этой проблемы? Или почему это невозможно под PG?

1 Ответ

0 голосов
/ 25 апреля 2020

Это зависит от того, что именно вы хотите сделать с индексом.

Один из вариантов будет не индексировать сами объекты, а упрощенную версию:

CREATE INDEX ON atable USING gist (st_simplify(geom, 1, TRUE));

И затем использовать это как предварительный фильтр:

SELECT ... FROM atable
WHERE st_intersects(st_simplify(geom, 1, TRUE), GEOMETRY '...')
  AND st_intersects(geom, GEOMETRY '...');

Это может использовать индекс. Проблема заключается в том, что упрощенная геометрия не пересекается, поэтому вы можете получить ложные негативы в угловых случаях.

...