sql kinerja indeks spasial server

14

Saya punya meja dengan sekitar 2 juta catatan di dalamnya. Saya membuat indeks spasial, menggunakan default selain kotak pembatas. Saya telah memperhatikan bahwa beberapa pertanyaan sangat cepat, dan beberapa sangat lambat. Faktor penentu muncul dengan ukuran poligon yang digunakan dalam kueri.

Pada area pencarian yang lebih besar, penggunaan WITH(INDEX(SIX_FT5))memperlambat permintaan secara signifikan (dari 0 detik, hingga 15+ detik). Pada area pencarian yang lebih kecil, kebalikannya benar.

Berikut beberapa pertanyaan yang saya uji:

Cepat:

SELECT TOP(1000) * FROM [FT5] WHERE (shape.STIntersects(geometry::STGeomFromText('POLYGON ((-133462.805381701 -668610.241000959, 2934415.68824241 -668610.241000959, 2934415.68824241 2200521.65831815, -133462.805381701 2200521.65831815, -133462.805381701 -668610.241000959))', 2264)) = 1) 

Lambat:

SELECT TOP(1000) * FROM [FT5] WITH(INDEX(SIX_FT5)) WHERE (shape.STIntersects(geometry::STGeomFromText('POLYGON ((-133462.805381701 -668610.241000959, 2934415.68824241 -668610.241000959, 2934415.68824241 2200521.65831815, -133462.805381701 2200521.65831815, -133462.805381701 -668610.241000959))', 2264)) = 1) 

Adakah yang tahu apa yang terjadi di sini?

mdm20
sumber
Saya baru saja melalui sesuatu yang serupa dba.stackexchange.com/questions/61289/ ... tempo hari ... Saya tidak menghasilkan poligon dari teks, tetapi berpotongan titik dan poligon ... Saya ditentukan untuk menggunakan indeks spasial pada titik, yang memiliki hasil kecepatan yang luar biasa. Saya kemudian mencoba menggunakan indeks spasial pada poligon, dan memiliki kinerja yang sangat buruk ... yang sepertinya kebalikan dari masalah Anda!
DPSSpatial
4
Jika Anda memikirkannya, mengubah ukuran amplop pencarian akan berdampak signifikan pada kueri - semakin banyak baris yang dikembalikan melalui indeks, semakin lambat responsnya. Pada titik tertentu, pemindaian tabel penuh menjadi lebih cepat dan membuang baris berdasarkan amplop. Saya menyarankan agar Anda menghabiskan lebih banyak waktu dengan opsi indeks spasial, karena Anda mungkin memiliki ruang untuk optimasi indeks.
Vince
Apakah catatan Anda mewakili poin? Itu tidak disebutkan. Selain itu, dapatkah Anda menerbitkan sintaks indeks pembuatan yang Anda gunakan? Apakah itu AutoGrid?
gischimp
Saya telah menggunakan 'Geography Auto Gird' dan 'Cells per Object' = 4000. Berpotongan 110+ juta poin dengan ~ 45K poligon.
Michael
1
Hal lain yang harus Anda ingat adalah bahwa berpotongan adalah operasi yang kompleks, pertama itu harus melihat apakah elemen terikat berpotongan, operasi yang relatif cepat melalui indeks, tetapi kemudian untuk setiap item yang cocok, itu harus menghitung jika setiap item benar-benar berpotongan, yang adalah satu lagi, operasi yang lebih mahal, yang menjadi lebih mahal karena poligon lebih kompleks dan / atau lebih banyak.
AKK2

Jawaban:

1

Seperti yang dikomentari oleh @Vince :

Jika Anda memikirkannya, mengubah ukuran amplop pencarian akan berdampak signifikan pada kueri - semakin banyak baris yang dikembalikan melalui indeks, semakin lambat responsnya. Pada titik tertentu, pemindaian tabel penuh menjadi lebih cepat dan membuang baris berdasarkan amplop. Saya menyarankan agar Anda menghabiskan lebih banyak waktu dengan opsi indeks spasial, karena Anda mungkin memiliki ruang untuk optimasi indeks.

PolyGeo
sumber