Übersicht über räumliche Indizierung

In SQL Server 2008 und höheren Versionen werden räumlichen Daten unterstützt. Hierunter fällt die Unterstützung des planaren räumliche-Daten-Typs geometry, der geometrische Daten (Punkte, Linien und Polygone) in einem euklidischen Koordinatensystem unterstützt. Der geography-Datentyp stellt geografische Objekte auf einem Bereich der Erdoberfläche dar, z. B. einen Landstrich. Mit einem räumlichen Index für eine geography-Spalte werden geografische Daten einem zweidimensionalen, nicht-euklidischen Raum zugeordnet.

Ein räumlicher Index wird für eine Tabellenspalte definiert, die räumliche Daten enthält (eine räumliche Spalte). Jeder räumliche Index verweist auf einen endlichen Raum. Zum Beispiel verweist ein Index für eine geometry-Spalte auf einen benutzerdefinierten rechteckigen Bereich auf einer Ebene.

Zerlegen von indiziertem Raum in eine Rasterhierarchie

In SQL Server 2008 werden räumliche Indizes mithilfe von B-Strukturen erstellt, und 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 2008 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 3 und Ebene 4 bezeichnet.

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 (beispielsweise 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.

Vier Ebenen des rekursiven Mosaiks

HinweisHinweis

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.

Polygone und Linien in einem 4x4-Raster der Ebene 1 platziert

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 INDEXTransact-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

MEDIUM

8X8

64

HIGH

16X16

256

Der Standard ist MEDIUM auf allen Ebenen.

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.

HinweisHinweis

Die Rasterdichten eines räumlichen Index werden in den Spalten level_1_grid, level_2_grid, level_3_grid und level_4_grid der sys.spatial_index_tessellations-Katalogsicht angezeigt.

Mosaik

Nach der Zerlegung eines indizierten Raums in eine Rasterhierarchie werden die Daten anhand des räumlichen Index 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 Mosaikprozesswird 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.

Überlagerungsoptimierung

Ü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.

Ziehen Sie beispielsweise die vorstehende Abbildung in Betracht, 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 INDEXTransact-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.

HinweisHinweis

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. Ein Objekt, das zu Zelle 1.1.1.1 gehört, gehört beispielsweise 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 im folgenden Zellen auf Ebene 1 bis Ebenen 3: 4, 4.4 sowie 4.4.10 und 4.4.14. 4.4.10.13-15 und 4.4.14.1-3, 4.4.14.5-7 und 4.4.14.9-11.

Tiefste-Zelle-Optimierung

Mosaikschemas

Das Verhalten eines räumlichen Index hängt teilweise von seinem Mosaikschema ab. Das Mosaikschema ist datentypspezifisch. In SQL Server 2008 werden zwei Mosaikschemas für räumliche Indizes unterstützt:

  • Das Geometrierastermosaikschema, das als Schema für den geometry-Datentyp vorgesehen ist.

  • Geografierastermosaik, das für Spalten des geography-Datentyps gilt.

HinweisHinweis

Die tessellation_scheme-Einstellung eines räumlichen Indexes wird in der sys.spatial_index_tessellations-Katalogsicht angezeigt.

Geometrierastermosaikschema

Das Geometrierastermosaikschema ist das Standardschema für den geometry-Datentyp, und in SQL Server 2008 ist nur dieses Mosaikschema dieses Typs verfügbar. 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.

HinweisHinweis

Dieses Mosaikschema kann mit der USING GEOMETRY_GRID-Klausel der CREATE SPATIAL INDEXTransact-SQL-Anweisung explizit angegeben werden.

Unterstützte geometry-Methoden

Der räumliche Index soll den Aufwand verringern, der mit der Anwendung mengenorientierter Methoden auf eine räumliche Spalte verbunden sind, indem er als Filter für Objekte fungiert. Der geometry-Datentyp stellt integrierte Methoden für die Konstruktion von geometry-Instanzen bereit, die geometrische Objekte beschreiben, und Methoden zur Bearbeitung dieser Instanzen. Unter bestimmten Bedingungen unterstützen räumliche Indizes einige mengenorientierte Geometriemethoden, z. B. STIntersects() und STTouches().

Weitere Informationen zu der von räumlichen Indizes für Geometriemethoden bereitgestellten Unterstützung finden Sie unter Von räumlichen Indizes unterstützte geometry-Methoden.

Das umgebende Feld

Geometrische Daten belegen eine Fläche, die unendlich sein kann. In SQL Server 2008 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 Index 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.

HinweisHinweis

Diese Koordinaten werden in der BOUNDING_BOX-Klausel der CREATE SPATIAL INDEXTransact-SQL-Anweisung angegeben.

Die Koordinaten (x-min,y-min) und (x-max,y-max) bestimmen die Position und die Größe 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 Abbildung 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.

Umgebendes Feld mit Koordinaten und Zelle 0

Ein umgebendes Feld entspricht zu einem gewissen Teil den räumlichen Daten einer Anwendung. Ob das umgebende Feld des Index 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.

HinweisHinweis

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 geography-Spalten. 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.

HinweisHinweis

Dieses Mosaikschema kann mit der USING GEOGRAPHY_GRID-Klausel der CREATE SPATIAL INDEXTransact-SQL-Anweisung explizit angegeben werden.

Unterstützte geography-Methoden

Der geography-Datentyp stellt integrierte Methoden für die Konstruktion und Bearbeitung von geography-Instanzen, die geografische Objekte beschreiben, bereit. Unter bestimmten Bedingungen unterstützen räumliche Indizes die folgenden mengenorientierten geography-Methoden: STIntersects(),STEquals() und STDistance(). Der räumliche Index für eine Spalte vom geography-Datentyp filtert die Objekte und reduziert die Leistungs- und Abfragekosten, die mit der Anwendung dieser Methoden auf die räumlichen Daten verbunden sind.

Weitere Informationen zu der von räumlichen Indizes für geography-Methoden bereitgestellten Unterstützung finden Sie unter Von Räumlichkeitsindizes unterstützte Geografiemethoden.

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:

  1. Jede Hemisphäre wird auf die Facetten einer vierseitigen Pyramide projiziert.

  2. Die beiden Pyramiden werden auf eine Ebene reduziert.

  3. 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 Längengrad am Äquator und eine Reihe von grünen senkrechten Linien verschiedene Breitengrade 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.

Projektion des Ellipsoids auf eine Ebene

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.

Geografieraster der Ebene 1

Unterstützung von räumlichen Indizes

Ein räumlicher Index kann nur für eine räumlichen Spalte erstellt werden. Räumliche Indizes können für jede räumliche Spalte einer Tabelle erstellt werden, und für eine gegebene räumliche Spalte können mehrere räumliche Indizes erstellt werden. Weitere Informationen zu den Beschränkungen von räumlichen Indizes finden Sie unter Einschränkungen für Räumlichkeitsindizes.