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?
Jawaban:
Seperti yang dikomentari oleh @Vince :
sumber