Saya memiliki tabel spasial dalam database PostgreSQL / PostGIS. Setiap baris di dalamnya mewakili suatu Poligon. Bentuknya sebagai berikut:
+----+--------+
|gid | way |
+----+--------+
|241 | 01030..|
Kolom geometris adalah "cara" yang berisi geometri untuk poligon. Di WKT itu adalah: POLYGON (('....')). Saya melakukan banyak pertanyaan ST_Contains pada tabel ini, untuk menguji apakah dua poligon terkandung satu sama lain misalnya:
Select ST_Contains(a.way, b.way) From table AS a, table AS b Where a.gid = 15 And b.gid = 16
Saya bertanya-tanya bagaimana cara mempercepat permintaan ini dan menambahkan indeks spasial di atas meja:
CREATE INDEX table_way_gist ON table USING gist(way);
Tapi sebenarnya saya tidak melihat kecepatan. Saya membuat indeks SETELAH saya mengisi tabel dengan semua poligon SEBELUM saya melakukan query ST_Contains. Haruskah indeks ditambahkan sebelum mengisi tabel? Apakah ada persyaratan khusus di atas meja untuk bekerja dengan indeks? Proyeksi (srid) dari cara kolom geometrik diatur ke 900913.
Saya menggunakan: psql (PostgreSQL) 9.1.4 / POSTGIS = "1.5.3"
sumber
Sebagai unicoletti dikatakan , indeks inti pada kolom geometri hanya akan berfungsi jika Anda menggunakan ST_Contains () dalam ekspresi WHERE.
Misalnya, jika Anda ingin mengetahui semua poligon yang mengandung satu sama lain, Anda dapat menggunakan sesuatu seperti ini:
Dalam hal ini, tergantung pada ukuran tabel Anda dan kompleksitas geometri Anda, indeks inti harus memberikan kecepatan yang signifikan, karena ST_Contains akan mulai dengan memfilter poligon dengan membandingkan kotak batasnya sebelum benar-benar memeriksa geometri lengkapnya. Anda dapat melihat penjelasan kecil di Tutorial OpenGeo .
sumber