Tôi có hai bảng mà tôi muốn giao nhau. Bảng đầu tiên đại diện cho khoảng 50 triệu điểm và thứ hai là một lớp đa giác của tất cả các quốc gia trên thế giới. Tôi muốn lấy tất cả các điểm giao nhau với đa giác đó.Truy vấn không gian Postgresql quá chậm
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);
Truy vấn này rất đơn giản nhưng phải mất hơn 4 giờ để chạy. Tôi có chỉ số GIST được xây dựng trên cột hình học cho mỗi bảng và có VACUUM ANALYZE'd cả hai. Vẫn không tăng hiệu suất. Tôi đang chạy CENTOS 6 với Postgres 8.4 và PostGIS 1.5. Bất cứ ai có thể làm sáng tỏ một số cách để tăng tốc độ? Tôi nhận được kết quả rất nhanh khi giới hạn truy vấn từ 1000 đến 10000 bản ghi. Khi tôi cố gắng lấy kết quả đầy đủ, nó sẽ kéo. Suy nghĩ?
CẬP NHẬT: Tôi thấy bây giờ tôi phải tinh chỉnh truy vấn của mình là bước đầu tiên trong quy trình này. Tôi nhận phong bì như thế này
select astext(st_envelope(wkb_geometry)) as e
from world_borders
where cntry_name = 'UK'
Bây giờ, cách hiệu quả nhất để bao gồm/thực hiện điều này như một phần của toàn bộ truy vấn là gì?
Mỗi bản phát hành gần đây đã cải thiện chỉ mục GiST và GIN. Bạn có thể muốn xem xét nâng cấp lên bản phát hành chính mới. Nó thậm chí có thể là giá trị cố gắng vấn đề của bạn trên bản phát hành 9,2 beta, kể từ khi nó bao gồm SP-GiST. http://www.postgresql.org/docs/9.2/static/spgist-intro.html – kgrittn