Übersicht über räumliche Indizes
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance
SQL Server unterstützt räumliche Daten und räumliche Indizes. Ein räumlicher Index ist ein erweiterter Index, der es Ihnen ermöglicht, eine räumliche Spalte zu indizieren. Eine räumliche Spalte ist eine Tabellenspalte mit Daten eines räumlichen Datentyps wie beispielsweise geometry oder geography.
Tipp
Räumliche SQL Server-Tools sind eine von Microsoft gesponserte Open-Source-Sammlung von Tools für die Verwendung mit den räumlichen Typen in SQL Server. Dieses Projekt bietet eine Reihe von wiederverwendbaren Funktionen, die von Anwendungen genutzt werden können. Diese Funktionen können Datenkonvertierungsroutinen, neue Transformationen, Aggregate usw. umfassen. Weitere Details finden Sie unter Microsoft/SQLServerSpatialTools in GitHub.
Informationen zu räumlichen Indizes
Zerlegen von indiziertem Raum in eine Rasterhierarchie
In SQL Server werden räumliche Indizes mithilfe von B-Strukturen erstellt; das heißt, dass die Indizes die zweidimensionalen räumlichen Daten in der linearen Reihenfolge der B-Strukturen darstellen müssen. Bevor Daten in einen räumlichen Index eingelesen werden, implementiert SQL Server daher eine einheitliche hierarchische Zerlegung des Raums. Während der Indexerstellung wird der Raum in eine vier Ebenen umfassende Rasterhierarchiezerlegt. Diese Ebenen werden als Ebene 1 (die oberste Ebene), Ebene 2, Ebene 3und Ebene 4bezeichnet.
Auf jeder nachfolgenden Ebene wird die ihr übergeordnete Ebene weiter zerlegt, sodass jede Zelle der übergeordneten Ebene ein vollständiges Raster der nächsten Ebene enthält. Auf einer gegebenen Ebene verfügen alle Raster an beiden Achsen über die gleiche Anzahl von Zellen (beispielweise 4 x 4 oder 8 x 8), und die Zellen sind alle gleich groß.
In der folgenden Abbildung wird dargestellt, wie die rechte obere Zelle auf jeder Ebene der Rasterhierarchie in ein Raster der Größe 4 x 4 zerlegt wird. In Wirklichkeit werden alle Zellen auf diese Art und Weise zerlegt. Wenn beispielsweise ein Raum in vier Ebenen von 4 x 4-Rastern zerlegt wird, resultieren daraus insgesamt 65.536 Zellen auf Ebene 4.
Hinweis
Die Zerlegung des Raums in einen räumlichen Index ist unabhängig von der Maßeinheit, die die Anwendung verwendet.
Die Zellen einer Rasterhierarchie werden mithilfe einer Variante der Raum füllenden Hilbert-Kurve linear nummeriert. Zur Veranschaulichung wird hier jedoch eine einfache zeilenweise Nummerierung statt der durch die Hilbert-Kurve erzeugten Nummerierung verwendet. In der folgenden Abbildung wurden bereits verschiedene Polygone, die Gebäude darstellen, und Linien, die Straßen darstellen, in einem 4 x 4-Raster der Ebene 1 platziert. Die Zellen der Ebene 1 werden ab der linken oberen Zelle von 1 bis 16 nummeriert.
Rasterdichte
Die Anzahl der Zellen entlang der Achsen eines Rasters bestimmt deren Dichte: je größer die Anzahl, desto dichter das Raster. Beispielsweise ist ein 8 x 8-Raster (das 64 Zellen ergibt), dichter als ein 4 x 4-Raster(das 16 Zellen ergibt). Die Rasterdichte wird pro Ebene definiert.
In der CREATE SPATIAL INDEX Transact-SQL-Anweisung kann eine GRIDS-Klausel angegeben werden, die es ermöglicht, für verschiedene Ebenen verschiedene Rasterdichten anzugeben. Die Rasterdichte für eine gegebene Ebene wird mit einem der folgenden Schlüsselwörter angegeben:
Schlüsselwort | Rasterkonfiguration | Anzahl von Zellen |
---|---|---|
LOW | 4X4 | 16 |
MITTEL | 8X8 | 64 |
HIGH | 16X16 | 256 |
In SQL Server ist die Standardeinstellung für alle Ebenen MEDIUM, wenn der Datenbank-Kompatibilitätsgrad auf 100 oder niedriger festgelegt wird. Wenn der Datenbank-Kompatibilitätsgrad auf 110 oder höher festgelegt wird, ist die Standardeinstellung ein automatisches Rasterschema. (Das automatische Raster zeigt eine 8-Ebenenkonfiguration von HLLLLLLL.) Anstelle einer wechselnden Indexrasterdichte können Sie Zellen pro Objekt variieren und Fensterzellen pro Objekt über Hinweise abfragen.
Sie können den Zerlegungsprozess steuern, indem Sie nicht standardmäßige Rasterdichten angeben. Beispielsweise können verschiedene Dichten auf verschiedenen Ebenen hilfreich sein, um einen Index auf die Größe des indizierten Raums und der Objekte in der räumlichen Spalte fein abzustimmen.
Hinweis
Die Rasterdichten eines räumlichen Index sind in den Spalten level_1_grid, level_2_grid, level_3_grid und level_4_grid der sys.spatial_index_tessellations -Katalogsicht sichtbar, wenn der Datenbank-Kompatibilitätsgrad auf 100 oder niedriger festgelegt wird. Die Mosaikschemaoptionen GEOMETRY_AUTO_GRID/GEOGRAPHY_AUTO_GRID füllen diese Spalten nicht auf. Die sys.spatial_index_tessellations-Katalogsicht enthält NULL -Werte für diese Spalten, wenn die automatischen Rasteroptionen verwendet werden.
Mosaik
Nach der Zerlegung eines indizierten Raums in eine Rasterhierarchie werden die Daten anhand des räumlichen Indexes zeilenweise aus der räumlichen Spalte gelesen. Nachdem die Daten für ein räumliches Objekt (bzw. eine räumliche Instanz) gelesen wurden, wird unter Verwendung des räumlichen Index ein Mosaikprozess für dieses Objekt durchgeführt. Durch den Mosaikprozess wird das Objekt in die Rasterhierarchie eingepasst, indem das Objekt der Menge von Rasterzellen zugeordnet wird, die es berührt (berührte Zellen). Auf Ebene 1 der Rasterhierarchie beginnend, verläuft der Mosaikprozess breitenorientiert über der Ebene. Potenziell kann der Prozess über alle vier Ebenen fortgesetzt werden, wobei zu einem Zeitpunkt jeweils nur eine Ebene bearbeitet werden kann.
Ergebnis des Mosaikprozesses ist eine Menge berührter Zellen, die im räumlichen Index für das betreffende Objekt verzeichnet sind. Durch das Verweisen auf diese aufgezeichneten Zellen kann mit dem räumlichen Index die Position des Objekts im Raum relativ zu anderen Objekten der räumlichen Spalte, die ebenfalls im Index gespeichert sind, bestimmt werden.
Mosaikregeln
Um die Anzahl berührter Zellen zu beschränken, die für ein Objekt verzeichnet werden, werden im Mosaikprozess einige Mosaikregeln berücksichtigt. Diese Regeln bestimmen die Tiefe des Mosaikprozesses, und sie legen fest, welche der berührten Zellen im räumlichen Index verzeichnet werden.
Nachfolgend sind diese Regeln aufgeführt:
Die Überlagerungsregel
Wenn das Objekt eine Zelle völlig bedeckt, heißt es, dass die Zelle vom Objekt überlagert wird. Eine überlagerte Zelle wird gezählt und nicht im Mosaikprozess berücksichtigt. Diese Regel ist auf allen Ebenen der Rasterhierarchie gültig. Die Überlagerungsregel vereinfacht den Mosaikprozess und verringert die Datenmenge, die in einem räumlichen Index aufgezeichnet wird.
Die Zellen-pro-Objekt-Regel
Diese Regel erzwingt den Zellen-pro-Objekt-Grenzwert, der die maximale Anzahl von Zellen festlegt, die für jedes Objekt gezählt werden können. Dieser Grenzwert gilt nicht für Ebene 1. Auf tieferen Ebenen steuert die Zellen-pro-Objekt-Regel die Informationsmenge, die über das Objekt aufgezeichnet werden kann.
Die Tiefste-Zelle-Regel
Die Tiefste-Zelle-Regel generiert die beste Näherung für ein Objekt, indem nur die Zellen der untersten Ebene aufgezeichnet werden, die im Mosaikprozess für das Objekt berücksichtigt wurden. Übergeordnete Zellen tragen nicht zur Zellen-pro-Objekt-Anzahl bei, und sie werden nicht im Index aufgezeichnet.
Diese Mosaikregeln werden rekursiv auf jeder Rasterebene angewendet. Im restlichen Teil dieses Abschnitts werden diese Mosaikregeln eingehender beschrieben.
Überlagerungsregel
Wenn ein Objekt eine Zelle völlig bedeckt, heißt es, dass die Zelle vom Objekt überlagert wird. In der folgenden Abbildung wird beispielsweise eine Zelle der zweiten Ebene (15.11) völlig vom mittleren Teil eines Oktagons überlagert.
Überlagerte Zellen werden gezählt und im Index verzeichnet. Diese Zellen unterliegen dem Mosaikprozess nicht weiter.
Zellen-pro-Objekt-Regel
Inwieweit ein Objekt dem Mosaikprozess unterliegt, hängt hauptsächlich vom Zellen-pro-Objekt-Grenzwert des räumlichen Index ab. Dieser Grenzwert definiert die maximale Anzahl von Zellen, die das Mosaik pro Objekt umfassen kann. Beachten Sie jedoch, dass dieser Grenzwert überschritten werden kann, weil die Einhaltung der Zellen-pro-Objekt-Regel auf Ebene 1 nicht erzwungen wird. Wenn die Anzahl auf Ebene 1 den Zellen-pro-Objekt-Grenzwert erreicht oder überschreitet, wird der Mosaikprozess auf den unteren Ebenen nicht weiter fortgesetzt.
Solange die Anzahl kleiner als der Zellen-pro-Objekt-Grenzwert ist, wird der Mosaikprozess fortgesetzt. Beginnend mit der überlagerten Zelle mit der niedrigsten Anzahl (in der vorstehenden Abbildung beispielsweise Zelle 15,6), werden in diesem Prozess alle Zellen daraufhin überprüft, ob sie gezählt oder weiter zusammengesetzt werden sollen. Wenn eine Zelle bei einer weiteren Mosaikbearbeitung den Zellen-pro-Objekt-Grenzwert übersteigen würde, wird die Zelle gezählt und nicht weiter dem Mosaikprozess unterzogen. Andernfalls wird die Zelle im Mosaikprozess berücksichtigt, und es werden die Zellen der untergeordneten Ebene gezählt, die vom Objekt überlagert werden. Der Mosaikprozess wird auf diese Art breitenorientiert über die gesamte Ebene hinweg fortgesetzt. Dieser Prozess wird solange rekursiv in den Rastern untergeordneter Ebenen des Mosaikprozesses fortgesetzt, bis der Grenzwert erreicht wird oder keine zu zählenden Zellen mehr vorhanden sind.
Betrachten Sie beispielsweise die vorstehende Abbildung, die ein Oktagon zeigt, das vollständig in Zelle 15 des Rasters der Ebene 1 passt. In der Abbildung wurde Zelle 15 dem Mosaikprozess unterzogen, wodurch das Oktagon in neun Zellen der Ebene 2 zerlegt wurde. In dieser Illustration wird davon ausgegangen, dass der Zellen-pro-Objekt-Grenzwert gleich 9 oder höher ist. Wäre der Zellen-pro-Objekt-Grenzwert gleich 8 oder kleiner, dann würde Zelle 15 nicht im Mosaikprozess berücksichtigt, und nur diese eine Zelle 15 würde für das Objekt gezählt.
In der Standardeinstellung ist der Zellen-pro-Objekt-Grenzwert mit 16 Zellen pro Objekt definiert, was für die meisten räumlichen Indizes einen zufriedenstellenden Kompromiss zwischen Raum und Genauigkeit darstellt. In der CREATE SPATIAL INDEX-Transact-SQL-Anweisung kann jedoch eine CELLS_PER_OBJECT = n-Klausel angegeben werden, die es Ihnen ermöglicht, einen Zellen-pro-Objekt-Grenzwert zwischen 1 und 8192 (einschließlich) festzulegen.
Hinweis
Die cells_per_object -Einstellung eines räumlichen Index wird in der sys.spatial_index_tessellations -Katalogsicht angezeigt.
Tiefste-Zelle-Regel
Bei der Tiefste-Zelle-Regel wird die Tatsache genutzt, dass jede Zelle einer untergeordneten Ebene zu der ihr übergeordneten Zelle gehört: Eine Zelle auf Ebene 4 gehört zu einer Zelle auf Ebene 3, eine Zelle auf Ebene 3 gehört zu einer Zelle auf Ebene 2, und eine Zelle auf Ebene 2 gehört zu einer Zelle auf Ebene 1. Zum Beispiel gehört ein Objekt, das zu Zelle 1.1.1.1 gehört, auch zu Zelle 1.1.1, Zelle 1.1 und Zelle 1. Die Kenntnis solcher Beziehungen in der Zellenhierarchie wurde in den Abfrageprozessor integriert. Daher müssen nur die Zellen der tiefsten Ebene im Index verzeichnet werden, sodass im Index nur die minimale Menge an Informationen gespeichert werden muss.
In der folgenden Abbildung wird ein relativ kleines rautenförmiges Polygon durch den Mosaikprozess unterteilt. Für den Index wird der vordefinierte Zellen-pro-Objekt-Grenzwert 16 verwendet, die bei diesem kleinen Objekt nicht erreicht wird. Deshalb wird der Mosaikprozess bis zu Ebene 4 fortgesetzt. Das Polygon befindet sich in den folgenden Zellen der Ebene 1 bis Ebene 3: 4, 4.4, 4.4.10 und 4.4.14. Bei Verwendung der Tiefste-Zelle-Regel zählt das Mosaik jedoch nur die 12 Zellen auf Ebene 4: 4.4.10.13-15, 4.4.14.1-3, 4.4.14.5-7 und 4.4.14.9-11.
Mosaikschemas
Das Verhalten eines räumlichen Indexes hängt teilweise von seinem Mosaikschemaab. Das Mosaikschema ist datentypspezifisch. In SQL Server werden zwei Mosaikschemas für räumliche Indizes unterstützt:
DasGeometrieraster-Mosaikschema, das als Schema für den geometry -Datentyp vorgesehen ist.
Geografierastermosaik, das für Spalten des geography -Datentyps gilt.
Hinweis
Die tessellation_scheme -Einstellung eines räumlichen Index wird in der sys.spatial_index_tessellations -Katalogansicht angezeigt.
Geometrieraster-Mosaikschema
Das GEOMETRY_AUTO_GRID-Mosaik ist das Standardschema für den geometry-Datentyp für SQL Server 2012 (11.x) und höher. Das GEOMETRY_GRID-Mosaik ist das einzige Mosaikschema, das für geometry-Datentypen in SQL Server 2008 (10.0.x) verfügbar ist. In diesem Abschnitt werden die Aspekte des Geometrierastermosaikschemas behandelt, die für die Arbeit mit räumlichen Indizes relevant sind: unterstützte Methoden und umgebende Felder.
Hinweis
Dieses Mosaikschema kann mit der USING (GEOMETRY_AUTO_GRID/GEOMETRY_GRID)-Klausel der CREATE SPATIAL INDEX-Transact-SQL-Anweisung explizit angegeben werden.
Das umgebende Feld
Geometrische Daten belegen eine Fläche, die unendlich sein kann. In SQL Server erfordert ein räumlicher Index jedoch einen endlichen Raum. Um einen endlichen Raum für die Zerlegung einzurichten, erfordert das Geometrierastermosaikschema ein rechteckiges umgebendes Feld. Das umgebende Feld wird durch vier Koordinaten definiert, (x-min,y-min) und (x-max,y-max), die als Eigenschaften des räumlichen Indexes gespeichert werden. Diese Koordinaten stellen Folgendes dar:
x-min ist die X-Koordinate der linken unteren Ecke des umgebenden Felds.
y-min ist die Y-Koordinate der unteren linken Ecke.
x-max ist die X-Koordinate der oberen rechten Ecke.
y-max ist die Y-Koordinate der oberen rechten Ecke.
Hinweis
Diese Koordinaten werden in der BOUNDING_BOX-Klausel der CREATE SPATIAL INDEX-Transact-SQL-Anweisung angegeben.
Die Koordinaten (x-min,y-min) und (x-max,y-max) bestimmen die Position und die Dimension des umgebenden Felds. Der Raum außerhalb des umgebenden Felds wird als einzelne Zelle behandelt, die die Nummer 0 erhält.
Der räumliche Index zerlegt den Raum im umgebenden Feld. Das Raster der Ebene 1 der Rasterhierarchie füllt das umgebende Feld aus. Zur Platzierung eines geometrischen Objekts in der Rasterhierarchie vergleicht der räumliche Index die Koordinaten des Objekts mit den Koordinaten des umgebenden Felds.
Die folgende Illustration zeigt die Punkte, die durch die Koordinaten (x-min,y-min) und (x-max,y-max) des umgebenden Felds definiert werden. Die obersten Ebene der Rasterhierarchie wird als 4 x 4-Raster angezeigt. Zur Veranschaulichung werden die niedrigeren Ebenen weggelassen. Der Raum außerhalb des umgebenden Felds wird durch eine Null (0) angegeben. Beachten Sie, dass Objekt 'A' teilweise über das Feld hinausragt und dass sich Objekt 'B' komplett außerhalb des Felds in Zelle 0 befindet.
Ein umgebendes Feld entspricht zu einem gewissen Teil den räumlichen Daten einer Anwendung. Ob das umgebende Feld des Indexes die in der räumlichen Spalte gespeicherten Daten vollständig oder nur zum Teil enthält, hängt von der Anwendung ab. Nur Vorgänge, die mit Objekten berechnet werden, die vollständig im umgebenden Feld liegen, profitieren vom räumlichen Index. Damit der räumliche Index für eine geometry -Spalte den größtmöglichen Nutzen bietet, müssen Sie ein umgebendes Feld angeben, das alle oder die meisten Objekte enthält.
Hinweis
Die Rasterdichten eines räumlichen Index werden in den Spalten bounding_box_xmin, bounding_box_ymin, bounding_box_xmax und bounding_box_ymax der sys.spatial_index_tessellations -Katalogsicht angezeigt.
Das Geografierastermosaikschema
Dieses Mosaikschema gilt nur für eine geography -Spalte. In diesem Abschnitt werden die Methoden zusammengefasst, die vom Geografierastermosaikschema unterstützt werden, und es wird erläutert, wie geodätischer Raum auf eine Ebene projiziert wird, die dann in eine Rasterhierarchie zerlegt wird.
Hinweis
Dieses Mosaikschema kann mit der USING (GEOGRAPHY_AUTO_GRID/GEOGRAPHY_GRID)-Klausel der CREATE SPATIAL INDEX-Transact-SQL-Anweisung explizit angegeben werden.
Projektion des geodätischen Raums auf eine Ebene
In Berechnungen mit geography -Instanzen (Objekten) wird der Raum, der die Objekte enthält, als geodätisches Ellipsoid behandelt. Zur Zerlegung dieses Raums unterteilt das Geografierastermosaikschema die Oberfläche des Ellipsoids in eine obere und eine untere Hemisphäre und führt dann die folgenden Schritte aus:
Jede Hemisphäre wird auf die Facetten einer vierseitigen Pyramide projiziert.
Die beiden Pyramiden werden auf eine Ebene reduziert.
Die vereinfachten Pyramiden werden verbunden, sodass sie eine nicht-euklidische Ebene bilden.
In der folgenden Illustration wird dieser dreistufige Zerlegungsprozess schematisch dargestellt. In den Pyramiden stellen die gepunkteten Linien die Begrenzungen der vier Facetten jeder Pyramide dar. Die Schritte 1 und 2 veranschaulichen das geodätische Ellipsoid, wobei eine grüne waagrechte Linie den Breitengrad am Äquator und eine Reihe von grünen senkrechten Linien verschiedene Längengrade darstellt. Schritt 1 zeigt die Pyramiden, die über die zwei Hemisphären projiziert werden. Schritt 2 zeigt, wie die Pyramiden auf eine Ebene reduziert werden. Schritt 3 veranschaulicht die reduzierten Pyramiden, nachdem diese zu einer Ebene kombiniert wurden, und zeigt einige projizierte Längengrade. Beachten Sie, dass diese projizierten Linien geglättet sind und eine unterschiedliche Länge haben, die davon abhängt, wo sie auf die Pyramiden auftreffen.
Nachdem der Raum auf eine Ebene projiziert wurde, wird der Raum in die vier Ebenen umfassende Rasterhierarchie zerlegt. In anderen Ebenen können andere Rasterdichten verwendet werden. Die folgende Illustration zeigt die Ebene, nachdem sie in ein 4 x 4-Raster der Ebene 1 zerlegt wurde. Zur Veranschaulichung werden die niedrigeren Ebenen der Rasterhierarchie hier weggelassen. In Wirklichkeit wird die Ebene vollständig in eine vier Ebenen umfassende Rasterhierarchie zerlegt. Nach Abschluss des Zerlegungsprozesses werden die geografischen Daten zeilenweise aus der geography-Spalte gelesen, und der Mosaikprozess wird wiederum für jedes Objekt durchgeführt.
Von räumlichen Indizes unterstützte Methoden
Von räumlichen Indizes unterstützte geometry-Methoden
Räumliche Indizes unterstützen unter bestimmten Bedingungen die folgenden mengenorientierten geometry-Methoden: STContains(), STDistance(), STEquals(), STIntersects(), STOverlaps(), STTouches() und STWithin(). Diese Methoden werden nur dann von einem räumlichen Index unterstützt, wenn sie in der WHERE-Klausel oder JOIN ON-Klausel einer Abfrage verwendet werden und in einem Prädikat der folgenden allgemeinen Form stehen:
geometrie1.Methodenname(geometrie2)Vergleichsoperator**gültige_Zahl
Es wird nur dann ein Ergebnis ungleich NULL zurückgegeben, wenn geometry1 und geometry2 über den gleichen SRID (Spatial Reference Identifier)verfügen. Anderenfalls gibt die Methode NULL zurück.
Räumliche Indizes unterstützen die folgenden Prädikatformen:
geometry1.STContains(geometry2) = 1
geometry1.STDistance(geometry2) <number
geometry1.STDistance(geometry2) <= number
geometry1.STEquals(geometry2)= 1
geometry1.STIntersects(geometry2)= 1
geometry1. STOverlaps (geometry2) = 1
geometry1.STTouches(geometry2) = 1
geometry1.STWithin(geometry2)= 1
Von räumlichen Indizes unterstützte geography-Methoden
Unter bestimmten Bedingungen unterstützen räumliche Indizes die folgenden mengenorientierten geography-Methoden: STIntersects(),STEquals() und STDistance(). Diese Methoden werden nur dann von einem räumlichen Index unterstützt, wenn sie in der WHERE-Klausel einer Abfrage verwendet werden und in einem Prädikat der folgenden allgemeinen Form stehen:
geographie1.Methodenname(geographie2)Vergleichsoperator**gültige_Zahl
Es wird nur dann ein Ergebnis ungleich NULL zurückgegeben, wenn geography1 und geography2 über den gleichen SRID (Spatial Reference Identifier)verfügen. Anderenfalls gibt die Methode NULL zurück.
Räumliche Indizes unterstützen die folgenden Prädikatformen:
geography1.STIntersects(geography2)= 1
geography1.STEquals(geography2)= 1
geography1.STDistance(geography2) <number
geography1.STDistance(geography2) <= number
Abfragen auf der Grundlage räumlicher Indizes
Räumliche Indizes werden nur in Abfragen unterstützt, die einen indizierten räumlichen Operator in der WHERE -Klausel enthalten. Beispiele für diese Syntax sind:
[spatial object].SpatialMethod([reference spatial object]) [ = | < ] [const literal or variable]
Der Abfrageoptimierer versteht die Vertauschbarkeit räumlicher Vorgänge ( @a.STIntersects(@b) = @b.STInterestcs(@a)
). Der räumliche Index wird jedoch nicht verwendet, wenn am Anfang eines Vergleichs kein räumlicher Operator steht (bei WHERE 1 = spatial op
wird z. B. kein räumlicher Index verwendet). Um den räumlichen Index zu verwenden, schreiben Sie den Vergleich um (z. B. WHERE spatial op = 1
).
Wenn räumliche Indizes unterstützt werden, wird die Entscheidung für die Verwendung des räumlichen Indexes wie bei jedem anderen Index auf Basis der Kosten gefällt. So kann es sein, dass der räumliche Index vom Abfrageoptimierer nicht ausgewählt wird, auch wenn alle Voraussetzungen für die Nutzung dieses Indexes erfüllt sind. Verwenden Sie Showplan, um festzustellen, ob der räumliche Index verwendet wurde, und geben Sie ggf. Abfragehinweise an, um einen gewünschten Abfrageplan zu erzwingen.
Der nächste Nachbartyp der Abfrage unterstützt ebenfalls räumliche Indizes, allerdings erfordert dies eine bestimmte Abfragesyntax. Die erforderliche Syntax lautet:
SELECT TOP(K) [WITH TIES] *
FROM <Table> AS T [WITH(INDEX(<SpatialIndex>))]
WHERE <SpatialColumn>.STDistance(@reference_object) IS NOT NULL
ORDER BY <SpatialColumn>.STDistance(@reference_object) [;]