Übersicht über räumliche IndizesSpatial Indexes Overview

Gilt für: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

SQL ServerSQL Server unterstützt räumliche Daten und räumliche Indizes.supports spatial data and spatial indexes. Ein räumlicher Index ist ein erweiterter Index, der es Ihnen ermöglicht, eine räumliche Spalte zu indizieren.A spatial index is a type of extended index that allows you to index a spatial column. Eine räumliche Spalte ist eine Tabellenspalte mit Daten eines räumlichen Datentyps wie beispielsweise geometry oder geography.A spatial column is a table column that contains data of a spatial data type, such as geometry or geography.

Wichtig

Um eine ausführliche Beschreibung und Beispiele der in SQL Server 2012 (11.x)SQL Server 2012 (11.x)eingeführten räumlichen Funktionen (z.B. Funktionen, die räumliche Indizes beeinflussen) zu erhalten, laden Sie das Whitepaper New Spatial Features in SQL Server 2012(Neue räumliche Funktionen in SQL Server 2012) herunter.For a detailed description and examples of spatial features introduced in SQL Server 2012 (11.x)SQL Server 2012 (11.x), including features that affect spatial indexes, download the white paper, New Spatial Features in SQL Server 2012.

Informationen zu räumlichen IndizesAbout Spatial Indexes

Zerlegen von indiziertem Raum in eine RasterhierarchieDecomposing Indexed Space into a Grid Hierarchy

In SQL ServerSQL Serverwerden 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.In SQL ServerSQL Server, spatial indexes are built using B-trees, which means that the indexes must represent the 2-dimensional spatial data in the linear order of B-trees. Bevor Daten in einen räumlichen Index eingelesen werden, implementiert SQL ServerSQL Server daher eine einheitliche hierarchische Zerlegung des Raums.Therefore, before reading data into a spatial index, SQL ServerSQL Server implements a hierarchical uniform decomposition of space. Während der Indexerstellung wird der Raum in eine vier Ebenen umfassende Rasterhierarchie zerlegt.The index-creation process decomposes the space into a four-level grid hierarchy. Diese Ebenen werden als Ebene 1 (die oberste Ebene), Ebene 2, Ebene 3und Ebene 4bezeichnet.These levels are referred to as level 1 (the top level), level 2, level 3, and level 4.

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.Each successive level further decomposes the level above it, so each upper-level cell contains a complete grid at the next level. 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ß.On a given level, all the grids have the same number of cells along both axes (for example, 4x4 or 8x8), and the cells are all one size.

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.The following illustration shows the decomposition for the upper-right cell at each level of the grid hierarchy into a 4x4 grid. In Wirklichkeit werden alle Zellen auf diese Art und Weise zerlegt.In reality, all the cells are decomposed in this way. Wenn beispielsweise ein Raum in vier Ebenen von 4 x 4-Rastern zerlegt wird, resultieren daraus insgesamt 65.536 Zellen auf Ebene 4.Thus, for example, decomposing a space into four levels of 4x4 grids actually produces a total of 65,536 level-four cells.

Vier Ebenen des rekursiven MosaiksFour-levels of recursive tessellation

Hinweis

Die Zerlegung des Raums in einen räumlichen Index ist unabhängig von der Maßeinheit, die die Anwendung verwendet.The decomposition of space for a spatial index is independent of the unit of measurement that the application data uses.

Die Zellen einer Rasterhierarchie werden mithilfe einer Variante der Raum füllenden Hilbert-Kurve linear nummeriert.Grid hierarchy cells are numbered in a linear fashion by using a variation of the Hilbert space-filling curve. Zur Veranschaulichung wird hier jedoch eine einfache zeilenweise Nummerierung statt der durch die Hilbert-Kurve erzeugten Nummerierung verwendet.For the purpose of illustration, however, this discussion uses a simple row-wise numbering, instead of the numbering that is actually produced by the Hilbert curve. 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.In the following illustration, several polygons that represent buildings, and lines that represent streets, have already been placed into a 4x4, level-1 grid. Die Zellen der Ebene 1 werden ab der linken oberen Zelle von 1 bis 16 nummeriert.The level-1 cells are numbered from 1 through 16, starting with the upper-left cell.

Polygone und Linien, platziert in einem 4x4-Raster der Ebene 1Polygons and lines placed into a 4x4 level-1 grid

RasterdichteGrid Density

Die Anzahl der Zellen entlang der Achsen eines Rasters bestimmt deren Dichte: je größer die Anzahl, desto dichter das Raster.The number of cells along the axes of a grid determines its density: the larger the number, the denser the grid. Beispielsweise ist ein 8 x 8-Raster (das 64 Zellen ergibt), dichter als ein 4 x 4-Raster(das 16 Zellen ergibt).For example, an 8x8 grid (which produces 64 cells), is denser than a 4x4 grid (which produces 16 cells). Die Rasterdichte wird pro Ebene definiert.Grid density is defined on a per-level basis.

In der CREATE SPATIAL INDEXTransact-SQLTransact-SQL -Anweisung kann eine GRIDS-Klausel angegeben werden, die es ermöglicht, für verschiedene Ebenen verschiedene Rasterdichten anzugeben.The CREATE SPATIAL INDEXTransact-SQLTransact-SQL statement supports a GRIDS clause that enables you to specify different grid densities at different levels. Die Rasterdichte für eine gegebene Ebene wird mit einem der folgenden Schlüsselwörter angegeben:The grid density for a given level is specified by using one of the following keywords.

SchlüsselwortKeyword RasterkonfigurationGrid configuration Anzahl von ZellenNumber of cells
LOWLOW 4X44X4 1616
MEDIUMMEDIUM 8X88X8 6464
HIGHHIGH 16X1616X16 256256

In SQL ServerSQL Serverist die Standardeinstellung für alle Ebenen MEDIUM, wenn der Datenbank-Kompatibilitätsgrad auf 100 oder niedriger festgelegt wird.In SQL ServerSQL Server, when the database compatibility level is set to 100 or lower, then the default is MEDIUM on all levels. Wenn der Datenbank-Kompatibilitätsgrad auf 110 oder höher festgelegt wird, ist die Standardeinstellung ein automatisches Rasterschema.When the database compatibility level is set to 110 or higher, then the default is an auto grid scheme. (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.(Auto grid indicates an 8 level configuration of HLLLLLLL.) Instead of varying index grid density, you can vary cells per object and query window cells per object via hint.

Sie können den Zerlegungsprozess steuern, indem Sie nicht standardmäßige Rasterdichten angeben.You can control the decomposition process by specifying non-default grid densities. 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.For example, different grid densities on different levels might be useful for fine tuning an index based on the size of the indexed space and the objects in the spatial column.

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.The grid densities of a spatial index are visible in the level_1_grid, level_2_grid, level_3_grid, and level_4_grid columns of the sys.spatial_index_tessellations catalog view when the database compatibility level is set to 100 or lower. Die Mosaikschemaoptionen GEOMETRY_AUTO_GRID/GEOGRAPHY_AUTO_GRID füllen diese Spalten nicht auf.The GEOMETRY_AUTO_GRID/GEOGRAPHY_AUTO_GRID tessellation scheme options do not populate these columns. Die sys.spatial_index_tessellations-Katalogsicht enthält NULL -Werte für diese Spalten, wenn die automatischen Rasteroptionen verwendet werden.sys.spatial_index_tessellations catalog view has NULL values for these columns when the auto grid options are used.

MosaikTessellation

Nach der Zerlegung eines indizierten Raums in eine Rasterhierarchie werden die Daten anhand des räumlichen Indexes zeilenweise aus der räumlichen Spalte gelesen.After decomposition of an indexed space into a grid hierarchy, the spatial index reads the data from the spatial column, row by row. 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.After reading the data for a spatial object (or instance), the spatial index performs a tessellation process for that object. 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).The tessellation process fits the object into the grid hierarchy by associating the object with a set of grid cells that it touches (touched cells). Auf Ebene 1 der Rasterhierarchie beginnend, verläuft der Mosaikprozess breitenorientiert über der Ebene.Starting at level 1 of the grid hierarchy, the tessellation process proceeds breadth first across the level. Potenziell kann der Prozess über alle vier Ebenen fortgesetzt werden, wobei zu einem Zeitpunkt jeweils nur eine Ebene bearbeitet werden kann.Potentially, the process can continue through all four levels, one level at a time.

Ergebnis des Mosaikprozesses ist eine Menge berührter Zellen, die im räumlichen Index für das betreffende Objekt verzeichnet sind.The output of the tessellation process is a set of touched cells that are recorded in the spatial index for the object. 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.By referring to these recorded cells, the spatial index can locate the object in space relative to other objects in the spatial column that are also stored in the index.

MosaikregelnTessellation Rules

Um die Anzahl berührter Zellen zu beschränken, die für ein Objekt verzeichnet werden, werden im Mosaikprozess einige Mosaikregeln berücksichtigt.To limit the number of touched cells that are recorded for an object, the tessellation process applies several tessellation rules. Diese Regeln bestimmen die Tiefe des Mosaikprozesses, und sie legen fest, welche der berührten Zellen im räumlichen Index verzeichnet werden.These rules determine the depth of the tessellation process and which of the touched cells are recorded in the index.

Nachfolgend sind diese Regeln aufgeführt:These rules are as follows:

  • Die ÜberlagerungsregelThe covering rule

    Wenn das Objekt eine Zelle völlig bedeckt, heißt es, dass die Zelle vom Objekt überlagert wird.If the object completely covers a cell, that cell is said to be covered by the object. Eine überlagerte Zelle wird gezählt und nicht im Mosaikprozess berücksichtigt.A covered cell is counted and is not tessellated. Diese Regel ist auf allen Ebenen der Rasterhierarchie gültig.This rule applies at all levels of the grid hierarchy. Die Überlagerungsregel vereinfacht den Mosaikprozess und verringert die Datenmenge, die in einem räumlichen Index aufgezeichnet wird.The covering rule simplifies the tessellation process and reduces the amount of data that a spatial index records.

  • Die Zellen-pro-Objekt-RegelThe cells-per-object rule

    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.This rule enforces the cells-per-object limit, which determines the maximum number of cells that can be counted for each object, except on level 1. Auf tieferen Ebenen steuert die Zellen-pro-Objekt-Regel die Informationsmenge, die über das Objekt aufgezeichnet werden kann.At lower levels, the cells-per-object rule controls the amount of information that can be recorded about the object.

  • Die Tiefste-Zelle-RegelThe deepest-cell rule

    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.The deepest-cell rule generates the best approximation of an object by recording only the bottom-most cells that have been tessellated for the object. Übergeordnete Zellen tragen nicht zur Zellen-pro-Objekt-Anzahl bei, und sie werden nicht im Index aufgezeichnet.Parent cells do not contribute to the cells-per-object count, and they are not recorded in the index.

Diese Mosaikregeln werden rekursiv auf jeder Rasterebene angewendet.These tessellation rules are applied recursively on each grid level. Im restlichen Teil dieses Abschnitts werden diese Mosaikregeln eingehender beschrieben.The rest of this section describes the tessellation rules in more detail.

ÜberlagerungsregelCovering Rule

Wenn ein Objekt eine Zelle völlig bedeckt, heißt es, dass die Zelle vom Objekt überlagert wird.If an object completely covers a cell, that cell is said to be covered by the object. In der folgenden Abbildung wird beispielsweise eine Zelle der zweiten Ebene (15.11) völlig vom mittleren Teil eines Oktagons überlagert.For example, in the following illustration, one of the second-level cells, 15.11, is completely covered by the middle portion of an octagon.

ÜberlagerungsoptimierungCovering optimization

Überlagerte Zellen werden gezählt und im Index verzeichnet. Diese Zellen unterliegen dem Mosaikprozess nicht weiter.A covered cell is counted and recorded in the index, and the cell is not tessellated any further.

Zellen-pro-Objekt-RegelCells-Per-Object Rule

Inwieweit ein Objekt dem Mosaikprozess unterliegt, hängt hauptsächlich vom Zellen-pro-Objekt-Grenzwert des räumlichen Index ab.The extent of tessellation of each object depends primarily on the cells-per-object limit of the spatial index. Dieser Grenzwert definiert die maximale Anzahl von Zellen, die das Mosaik pro Objekt umfassen kann.This limit defines the maximum number of cells that tessellation can count per object. Beachten Sie jedoch, dass dieser Grenzwert überschritten werden kann, weil die Einhaltung der Zellen-pro-Objekt-Regel auf Ebene 1 nicht erzwungen wird.Note, however, that the cells-per-object rule is not enforced for level 1, so it is possible to exceed this limit. Wenn die Anzahl auf Ebene 1 den Zellen-pro-Objekt-Grenzwert erreicht oder überschreitet, wird der Mosaikprozess auf den unteren Ebenen nicht weiter fortgesetzt.If the level-1 count reaches, or exceeds, the cells-per-object limit, no further tessellation occurs at the lower levels.

Solange die Anzahl kleiner als der Zellen-pro-Objekt-Grenzwert ist, wird der Mosaikprozess fortgesetzt.As long as the count is less than the cells-per-object limit, the tessellation process continues. 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.Starting with the lowest-number touched cell (for example, cell 15.6 in the preceding illustration), the process tests each cell to evaluate whether to count it or tessellate it. 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.If tessellating a cell would exceed the cells-per-object limit, the cell is counted and not tessellated. Andernfalls wird die Zelle im Mosaikprozess berücksichtigt, und es werden die Zellen der untergeordneten Ebene gezählt, die vom Objekt überlagert werden.Otherwise, the cell is tessellated, and the lower-level cells that are touched by the object are counted. Der Mosaikprozess wird auf diese Art breitenorientiert über die gesamte Ebene hinweg fortgesetzt.The tessellation process continues in this way, breadth-wise, across the level. 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.This process is repeated recursively for the lower-level grids of the tessellated cells until the limit is reached or there are no more cells to count.

Betrachten Sie beispielsweise die vorstehende Abbildung, die ein Oktagon zeigt, das vollständig in Zelle 15 des Rasters der Ebene 1 passt.For example, consider the preceding illustration, which shows an octagon that fits completely into cell 15 of the level-1 grid. In der Abbildung wurde Zelle 15 dem Mosaikprozess unterzogen, wodurch das Oktagon in neun Zellen der Ebene 2 zerlegt wurde.In the figure, cell 15 has been tessellated, dissecting the octagon into nine level-2 cells. In dieser Illustration wird davon ausgegangen, dass der Zellen-pro-Objekt-Grenzwert gleich 9 oder höher ist.This illustration assumes that the cells-per-object limit is 9 or more. 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.If the cells-per-object limit were 8 or less, however, cell 15 would not be tessellated, and only that cell 15 would be counted for the object.

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.By default, the cells-per-object limit is 16 cells per object, which provides a satisfactory trade-off between space and precision for most spatial indexes. In der CREATE SPATIAL INDEXTransact-SQLTransact-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.However, the CREATE SPATIAL INDEXTransact-SQLTransact-SQL statement supports a CELLS_PER_OBJECT**=**n clause that enables you to specify a cells-per-object limit between 1 and 8192, inclusive.

Hinweis

Die cells_per_object -Einstellung eines räumlichen Index wird in der sys.spatial_index_tessellations -Katalogsicht angezeigt.The cells_per_object setting of a spatial index is visible in the sys.spatial_index_tessellations catalog view.

Tiefste-Zelle-RegelDeepest-Cell Rule

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.The deepest-cell rule exploits the fact that every lower-level cell belongs to the cell above it: a level-4 cell belongs to a level-3 cell, a level-3 cell belongs to a level-2 cell, and a level-2 cell belongs to a level-1 cell. 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.For example, an object that belongs to cell 1.1.1.1 also belongs to cell 1.1.1, cell 1.1, and cell 1. Die Kenntnis solcher Beziehungen in der Zellenhierarchie wurde in den Abfrageprozessor integriert.Knowledge of such cell-hierarchy relationships is built into the query processor. 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.Therefore, only the deepest-level cells need to be recorded in the index, minimizing the information that the index needs to store.

In der folgenden Abbildung wird ein relativ kleines rautenförmiges Polygon durch den Mosaikprozess unterteilt.In the following illustration, a relatively small diamond-shaped polygon is tessellated. Für den Index wird der vordefinierte Zellen-pro-Objekt-Grenzwert 16 verwendet, die bei diesem kleinen Objekt nicht erreicht wird.The index uses the default cells-per-object limit of 16, which is not reached for this small object. Deshalb wird der Mosaikprozess bis zu Ebene 4 fortgesetzt.Therefore, tessellation continues down to level 4. Das Polygon befindet sich in den folgenden Zellen der Ebene 1 bis Ebene 3: 4, 4.4 und 4.4.10 und 4.4.14.The polygon resides in the following level-1 through level-3 cells: 4, 4.4, and 4.4.10 and 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 und 4.4.14.1-3, 4.4.14.5-7 und 4.4.14.9-11.However, using the deepest-cell rule, the tessellation counts only the twelve level-4 cells: 4.4.10.13-15 and 4.4.14.1-3, 4.4.14.5-7, and 4.4.14.9-11.

Tiefste-Zelle-OptimierungDeepest-cell optimization

MosaikschemasTessellation Schemes

Das Verhalten eines räumlichen Indexes hängt teilweise von seinem Mosaikschemaab.The behavior of a spatial index depends partly on its tessellation scheme. Das Mosaikschema ist datentypspezifisch.The tessellation scheme is data-type specific. In SQL ServerSQL Serverwerden zwei Mosaikschemas für räumliche Indizes unterstützt:In SQL ServerSQL Server, spatial indexes support two tessellation schemes:

  • DasGeometrieraster-Mosaikschema, das als Schema für den geometry -Datentyp vorgesehen ist.Geometry grid tessellation, which is the scheme for the geometry data type.

  • Geografierastermosaik, das für Spalten des geography -Datentyps gilt.Geography grid tessellation, which applies to columns of the geography data type.

Hinweis

Die tessellation_scheme -Einstellung eines räumlichen Index wird in der sys.spatial_index_tessellations -Katalogansicht angezeigt.The tessellation_scheme setting of a spatial index is visible in the sys.spatial_index_tessellations catalog view.

Geometrieraster-MosaikschemaGeometry Grid Tessellation Scheme

Das GEOMETRY_AUTO_GRID-Mosaik ist das Standardschema für den geometry -Datentyp für SQL Server 2012 (11.x)SQL Server 2012 (11.x) und höher.GEOMETRY_AUTO_GRID tessellation is the default tessellation scheme for the geometry data type for SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later. Das GEOMETRY_GRID-Mosaik ist das einzige Mosaikschema, das für geometry-Datentypen in SQL Server 2008SQL Server 2008verfügbar ist.GEOMETRY_GRID tessellation is the only tessellation scheme available for geometry data types in SQL Server 2008SQL Server 2008. 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.This section discusses aspects of geometry grid tessellation that are relevant to working with spatial indexes: supported methods and bounding boxes.

Hinweis

Dieses Mosaikschema kann mit der USING (GEOMETRY_AUTO_GRID/GEOMETRY_GRID)-Klausel der CREATE SPATIAL INDEXTransact-SQLTransact-SQL-Anweisung explizit angegeben werden.You can explicitly specify this tessellation scheme by using the USING (GEOMETRY_AUTO_GRID/GEOMETRY_GRID) clause of the CREATE SPATIAL INDEX Transact-SQLTransact-SQL statement.

Das umgebende FeldThe Bounding Box

Geometrische Daten belegen eine Fläche, die unendlich sein kann.Geometric data occupies a plane that can be infinite. In SQL ServerSQL Servererfordert ein räumlicher Index jedoch einen endlichen Raum.In SQL ServerSQL Server, however, a spatial index requires a finite space. Um einen endlichen Raum für die Zerlegung einzurichten, erfordert das Geometrierastermosaikschema ein rechteckiges umgebendes Feld.To establish a finite space for decomposition, the geometry grid tessellation scheme requires a rectangular bounding box. 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.The bounding box is defined by four coordinates, (x-min,y-min) and (x-max,y-max), which are stored as properties of the spatial index. Diese Koordinaten stellen Folgendes dar:These coordinates represent the following:

  • x-min ist die X-Koordinate der linken unteren Ecke des umgebenden Felds.x-min is the x-coordinate of the lower-left corner of the bounding box.

  • y-min ist die Y-Koordinate der unteren linken Ecke.y-min is the y-coordinate of the lower-left corner.

  • x-max ist die X-Koordinate der oberen rechten Ecke.x-max is the x-coordinate of the upper-right corner.

  • y-max ist die Y-Koordinate der oberen rechten Ecke.y-max is the y-coordinate of upper-right corner.

Hinweis

Diese Koordinaten werden in der BOUNDING_BOX-Klausel der CREATE SPATIAL INDEXTransact-SQLTransact-SQL -Anweisung angegeben.These coordinates are specified by the BOUNDING_BOX clause of the CREATE SPATIAL INDEXTransact-SQLTransact-SQL statement.

Die Koordinaten ( x-min , y-min ) und ( x-max , y-max ) bestimmen die Position und die Größe des umgebenden Felds.The (x-min,y-min) and (x-max,y-max) coordinates determine the placement and dimensions of the bounding box. Der Raum außerhalb des umgebenden Felds wird als einzelne Zelle behandelt, die die Nummer 0 erhält.The space outside of the bounding box is treated as a single cell that is numbered 0.

Der räumliche Index zerlegt den Raum im umgebenden Feld.The spatial index decomposes the space inside the bounding box. Das Raster der Ebene 1 der Rasterhierarchie füllt das umgebende Feld aus.The level-1 grid of the grid hierarchy fills the bounding box. Zur Platzierung eines geometrischen Objekts in der Rasterhierarchie vergleicht der räumliche Index die Koordinaten des Objekts mit den Koordinaten des umgebenden Felds.To place a geometric object in the grid hierarchy, the spatial index compares the coordinates of the object to the bounding-box coordinates.

Die folgende Abbildung zeigt die Punkte, die durch die Koordinaten ( x-min , y-min ) und ( x-max , y-max ) des umgebenden Felds definiert werden.The following illustration shows the points defined by the (x-min,y-min) and (x-max,y-max) coordinates of the bounding box. Die obersten Ebene der Rasterhierarchie wird als 4 x 4-Raster angezeigt.The top-level of the grid hierarchy is shown as a 4x4 grid. Zur Veranschaulichung werden die niedrigeren Ebenen weggelassen.For the purpose of illustration, the lower levels are omitted. Der Raum außerhalb des umgebenden Felds wird durch eine Null (0) angegeben.The space outside of the bounding box is indicated by a zero (0). Beachten Sie, dass Objekt 'A' teilweise über das Feld hinausragt und dass sich Objekt 'B' komplett außerhalb des Felds in Zelle 0 befindet.Note that object 'A' extends partly beyond the box, and object 'B' lies completely outside the box in cell 0.

Umgebendes Feld mit Koordinaten und Zelle 0.Bounding box showing coordinates and cell 0.

Ein umgebendes Feld entspricht zu einem gewissen Teil den räumlichen Daten einer Anwendung.A bounding box corresponds to some portion of an application's spatial data. 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.Whether the bounding-box of the index completely contains the data stored in the spatial column, or only contains a portion, is up to the application. Nur Vorgänge, die mit Objekten berechnet werden, die vollständig im umgebenden Feld liegen, profitieren vom räumlichen Index.Only operations computed on objects that are entirely inside of the bounding box benefit from the spatial 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.Therefore, to gain the greatest advantage from a spatial index on a geometry column, you need to specify a bounding-box that contains all or most of the objects.

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.The grid densities of a spatial index are visible in the bounding_box_xmin, bounding_box_ymin, bounding_box_xmax, and bounding_box_ymax columns of the sys.spatial_index_tessellations catalog view.

Das GeografierastermosaikschemaThe Geography Grid Tessellation Scheme

Dieses Mosaikschema gilt nur für eine geography -Spalte.This tessellation scheme applies only to a geography column. 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.This section summarizes the methods that are supported by geography grid tessellation and discusses how geodetic space is projected onto a plane, which is then decomposed into a grid hierarchy.

Hinweis

Dieses Mosaikschema kann mit der USING (GEOGRAPHY_AUTO_GRID/GEOGRAPHY_GRID)-Klausel der CREATE SPATIAL INDEXTransact-SQLTransact-SQL -Anweisung explizit angegeben werden.You can explicitly specify this tessellation scheme by using the USING (GEOGRAPHY_AUTO_GRID/GEOGRAPHY_GRID) clause of the CREATE SPATIAL INDEXTransact-SQLTransact-SQL statement.

Projektion des geodätischen Raums auf eine EbeneProjection of the Geodetic Space onto a Plane

In Berechnungen mit geography -Instanzen (Objekten) wird der Raum, der die Objekte enthält, als geodätisches Ellipsoid behandelt.Computations on geography instances (objects) treat the space containing the objects as a geodetic ellipsoid. 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:To decompose this space, the geography grid tessellation scheme divides the surface of the ellipsoid into its upper and lower hemispheres and then performs the following steps:

  1. Jede Hemisphäre wird auf die Facetten einer vierseitigen Pyramide projiziert.Projects each hemisphere onto the facets of a quadrilateral pyramid.

  2. Die beiden Pyramiden werden auf eine Ebene reduziert.Flattens the two pyramids.

  3. Die vereinfachten Pyramiden werden verbunden, sodass sie eine nicht-euklidische Ebene bilden.Joins the flattened pyramids to form a non-Euclidean plane.

In der folgenden Illustration wird dieser dreistufige Zerlegungsprozess schematisch dargestellt.The following illustration shows a schematic view of the three-step decomposition process. In den Pyramiden stellen die gepunkteten Linien die Begrenzungen der vier Facetten jeder Pyramide dar.In the pyramids, the dotted lines represent the boundaries of the four facets of each pyramid. 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.Steps 1 and 2 illustrate the geodetic ellipsoid, using a green horizontal line to represent the equatorial latitude line and a series of green vertical lines to represent several longitude lines. Schritt 1 zeigt die Pyramiden, die über die zwei Hemisphären projiziert werden.Step 1 shows the pyramids being projected over the two hemispheres. Schritt 2 zeigt, wie die Pyramiden auf eine Ebene reduziert werden.Step 2 shows the pyramids being flattened. Schritt 3 veranschaulicht die reduzierten Pyramiden, nachdem diese zu einer Ebene kombiniert wurden, und zeigt einige projizierte Längengrade.Step 3 illustrates the flattened pyramids, after they have been combined to form a plane, showing a number of projected longitude lines. 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.Notice that these projected lines are straightened and vary in length, depending on where they fall on the pyramids.

Projektion des Ellipsoids auf eine EbeneProjection of the ellipsoid onto a plane

Nachdem der Raum auf eine Ebene projiziert wurde, wird der Raum in die vier Ebenen umfassende Rasterhierarchie zerlegt.Once the space has been projected onto the plane, the plane is decomposed into the four-level grid hierarchy. In anderen Ebenen können andere Rasterdichten verwendet werden.Different levels can use different grid densities. Die folgende Illustration zeigt die Ebene, nachdem sie in ein 4 x 4-Raster der Ebene 1 zerlegt wurde.The following illustration shows the plane after it has been decomposed into a 4x4 level-1 grid. Zur Veranschaulichung werden die niedrigeren Ebenen der Rasterhierarchie hier weggelassen.For the purposes of illustration, the lower-levels of the grid hierarchy are omitted. In Wirklichkeit wird die Ebene vollständig in eine vier Ebenen umfassende Rasterhierarchie zerlegt.In actuality, the plane is fully decomposed into a four-level grid hierarchy. 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.After the decomposition process finishes, the geographic data is read, row by row, from the geography column, and the tessellation process is performed for each object in turn.

Geografieraster der Ebene 1Level-1 geography grid

Von räumlichen Indizes unterstützte MethodenMethods Supported by Spatial Indexes

Von räumlichen Indizes unterstützte geometry-MethodenGeometry Methods Supported by Spatial Indexes

Unter bestimmten Bedingungen unterstützen räumliche Indizes die folgenden mengenorientierten geometry-Methoden: STContains(), STDistance(), STEquals(), STIntersects(), STOverlaps(), STTouches() und STWithin().Spatial indexes support the following set-oriented geometry methods under certain conditions: STContains(), STDistance(), STEquals(), STIntersects(), STOverlaps(), STTouches(), and 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:To be supported by a spatial index, these methods must be used within the WHERE or JOIN ON clause of a query, and they must occur within a predicate of the following general form:

geometrie1.Methodenname(geometrie2)Vergleichsoperator**gültige_Zahlgeometry1.method_name(geometry2)comparison_operator**valid_number

Es wird nur dann ein Ergebnis ungleich NULL zurückgegeben, wenn geometry1 und geometry2 über den gleichen SRID (Spatial Reference Identifier)verfügen.To return a non-null result, geometry1 and geometry2 must have the same spatial reference identifier (SRID). Anderenfalls gibt die Methode NULL zurück.Otherwise, the method returns NULL.

Räumliche Indizes unterstützen die folgenden Prädikatformen:Spatial indexes support the following predicate forms:

Von räumlichen Indizes unterstützte geography-MethodenGeography Methods Supported by Spatial Indexes

Unter bestimmten Bedingungen unterstützen räumliche Indizes die folgenden mengenorientierten geography-Methoden: STIntersects(),STEquals() und STDistance().Under certain conditions, spatial indexes support the following set-oriented geography methods: STIntersects(),STEquals(), and 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:To be supported by a spatial index, these methods must be used within the WHERE clause of a query, and they must occur within a predicate of the following general form:

geographie1.Methodenname(geographie2)Vergleichsoperator**gültige_Zahlgeography1.method_name(geography2)comparison_operator**valid_number

Es wird nur dann ein Ergebnis ungleich NULL zurückgegeben, wenn geography1 und geography2 über den gleichen SRID (Spatial Reference Identifier)verfügen.To return a non-null result, geography1 and geography2 must have the same Spatial Reference Identifier (SRID). Anderenfalls gibt die Methode NULL zurück.Otherwise, the method returns NULL.

Räumliche Indizes unterstützen die folgenden Prädikatformen:Spatial indexes support the following predicate forms:

Abfragen auf der Grundlage räumlicher IndizesQueries that use Spatial Indexes

Räumliche Indizes werden nur in Abfragen unterstützt, die einen indizierten räumlichen Operator in der WHERE -Klausel enthalten.Spatial indexes are only supported in queries that include an indexed spatial operator in the WHERE clause. Beispiele für diese Syntax sind:For example syntax such as:

[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) ).The query optimizer understands the commutativity of spatial operations (that @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).However, the spatial index will not be used if the beginning of a comparison does not contain the spatial operator (for example WHERE 1 = spatial op will not use the spatial index). Um den räumlichen Index zu verwenden, schreiben Sie den Vergleich um (z. B. WHERE spatial op = 1).To use the spatial index, rewrite the comparison (for example 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.As with any other index, when a spatial index is supported, the use of the spatial index is chosen based on cost, so the query optimizer might not choose to use the spatial index even though all requirements for using it are met. 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.Use showplan to see if the spatial index was used and if necessary provide query hints to force a desired query plan.

Der nächste Nachbartyp der Abfrage unterstützt ebenfalls räumliche Indizes, allerdings erfordert dies eine bestimmte Abfragesyntax.The nearest neighbor type of query also supports spatial indexes however only if a specific query syntax is written. Die erforderliche Syntax lautet:The appropriate syntax is:

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) [;]  

Weitere InformationenSee Also

Räumliche Daten (SQL Server)Spatial Data (SQL Server)