Räumliche Indexleistung von SQL Server


14

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?


Ich habe neulich gerade etwas Ähnliches durchgemacht: dba.stackexchange.com/questions/61289/… . Ich habe kein Polygon aus Text generiert, sondern Punkte und Polygone geschnitten. Ich habe angegeben, dass der räumliche Index verwendet werden soll auf den Punkt, der große Geschwindigkeitsergebnisse hatte. Ich habe dann versucht, den räumlichen Index für das Polygon zu verwenden, und hatte eine sehr schlechte Leistung ... was genau das Gegenteil Ihres Problems zu sein scheint!
DPSSpatial

4
Wenn Sie darüber nachdenken, sollte sich eine Änderung der Größe des Suchumschlags erheblich auf die Abfrage auswirken. Je mehr Zeilen über einen Index zurückgegeben werden, desto langsamer ist die Antwort. Irgendwann wird es schneller, Tabellen vollständig zu scannen und Zeilen basierend auf dem Umschlag wegzuwerfen. Ich würde vorschlagen, dass Sie mehr Zeit mit den Optionen für den räumlichen Index verbringen, da Sie wahrscheinlich Raum für die Optimierung des Index haben.
Vince

Stellen Ihre Unterlagen Punkte dar? Das wurde nicht angegeben. Können Sie auch die von Ihnen verwendete Syntax zum Erstellen eines Index veröffentlichen? War es AutoGrid?
Gischimp

Ich habe 'Geography Auto Gird' und 'Cells per Object' = 4000 verwendet. 110+ Millionen Punkte mit ~ 45K Polygonen durchschnitten.
Michael

1
Sie müssen sich auch daran erinnern, dass eine Überschneidung eine komplexe Operation ist. Zuerst muss geprüft werden, ob sich die gebundenen Elemente überschneiden. Dann muss für jedes übereinstimmende Element berechnet werden, ob sich jedes einzelne Element tatsächlich überschneidet ist eine weitere, kostspieligere Operation, die umso kostspieliger wird, je komplexer und / oder zahlreicher die Polygone sind.
AKK2

Antworten:


1

Wie von @Vince kommentiert :

Wenn Sie darüber nachdenken, sollte sich eine Änderung der Größe des Suchumschlags erheblich auf die Abfrage auswirken. Je mehr Zeilen über einen Index zurückgegeben werden, desto langsamer ist die Antwort. Irgendwann wird es schneller, Tabellen vollständig zu scannen und Zeilen basierend auf dem Umschlag wegzuwerfen. Ich würde vorschlagen, dass Sie mehr Zeit mit den Optionen für den räumlichen Index verbringen, da Sie wahrscheinlich Raum für die Optimierung des Index haben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.