Mam dwie tabele, które chciałbym przeciąć. Pierwsza tabela przedstawia około 50 milionów punktów, a druga to wielobokowa warstwa wszystkich krajów na świecie. Chcę uzyskać wszystkie punkty, które przecinają się z tym wielokątem.Kwerenda przestrzenna PostgreSQL zbyt wolna
SELECT d.id, d.geom
FROM export d, world_boundaries b
WHERE (b.cntry_name = 'UK')
AND d.date_inserted >= '2012-06-01'
AND d.geom && b.wkb_geometry
AND intersects(d.geom, b.wkb_geometry);
To zapytanie jest bardzo proste, ale trwa dłużej niż 4 godziny. Mam indeksy GIST zbudowane na kolumnie geometrii dla każdej tabeli i mają ANULOWANĄ PRÓŻNICĘ obie te wartości. Nadal nie wzrost wydajności. Używam CENTOS 6 z Postgres 8.4 i PostGIS 1.5. Czy ktoś może rzucić trochę światła na to, jak przyspieszyć działania? Bardzo szybko uzyskuję wyniki, gdy OGRANICZAM zapytanie do 1000 do 10000 rekordów. Kiedy próbuję pobrać cały zestaw wyników, przeciąga. Myśli?
AKTUALIZACJA: Teraz widzę, że muszę zawęzić moje zapytanie jako pierwszy krok w tym procesie. Dostaję kopertę w następujący sposób: Jaki jest najskuteczniejszy sposób włączenia/wykonania tego w ramach całego zapytania?
Każda z ostatnich wersji poprawiła indeksy GiST i GIN. Możesz rozważyć aktualizację do nowej wersji głównej. Być może warto wypróbować swój problem w wersji 9.2 beta, ponieważ zawiera on SP-GiST. http://www.postgresql.org/docs/9.2/static/spgist-intro.html – kgrittn