Ich habe eine Tabelle mit ungefähr 2 Millionen Datensätzen. Ich erstelle einen räumlichen Index, wobei ich andere Standardwerte als den Begrenzungsrahmen verwende. Ich habe festgestellt, dass einige Abfragen extrem schnell und andere extrem langsam sind. Der bestimmende Faktor ergibt sich aus der Größe des in der Abfrage verwendeten Polygons.
In größeren Suchbereichen WITH(INDEX(SIX_FT5))
wird die Abfrage durch Verwendung von erheblich verlangsamt (von 0 Sekunden auf über 15 Sekunden). Auf kleineren Suchgebieten trifft genau das Gegenteil zu.
Hier sind einige der Abfragen, mit denen ich teste:
Schnell:
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)
Schleppend:
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)
Weiß jemand, was hier los ist?
Antworten:
Wie von @Vince kommentiert :
quelle