Mam tabelę z około 2 milionami rekordów. Tworzę indeks przestrzenny, używając wartości domyślnych innych niż obwiednia. Zauważyłem, że niektóre zapytania są bardzo szybkie, a niektóre bardzo wolne. Czynnikiem determinującym jest wielkość wielokąta użytego w zapytaniu.
W przypadku większych obszarów wyszukiwania użycie WITH(INDEX(SIX_FT5))
znacznie spowalnia zapytanie (od 0 sekund do ponad 15 sekund). W mniejszych obszarach wyszukiwania jest dokładnie odwrotnie.
Oto niektóre zapytania, z którymi testuję:
Szybki:
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)
Powolny:
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)
Czy ktoś wie, co się tutaj dzieje?
Odpowiedzi:
Jak skomentował @Vince :
źródło