Panoramica degli indici spazialiSpatial Indexes Overview

SQL ServerSQL Server supporta dati e indici spaziali. supports spatial data and spatial indexes. Un indice spaziale è un tipo di indice esteso che consente di indicizzare una colonna spaziale.A spatial index is a type of extended index that allows you to index a spatial column. Una colonna spaziale è una colonna della tabella che contiene dati spaziali, ad esempio geometry o geography.A spatial column is a table column that contains data of a spatial data type, such as geometry or geography.

Importante

Per una descrizione dettagliata ed esempi delle nuove funzionalità spaziali di SQL Server 2012SQL Server 2012, incluse le funzionalità che incidono sugli indici spaziali, scaricare il white paper New Spatial Features in SQL Server 2012(Nuove funzionalità spaziali in SQL Server 2012).For a detailed description and examples of spatial features introduced in SQL Server 2012SQL Server 2012, including features that affect spatial indexes, download the white paper, New Spatial Features in SQL Server 2012.

Informazioni sugli indici spaziali About Spatial Indexes

Scomposizione dello spazio indicizzato in una gerarchia di griglie Decomposing Indexed Space into a Grid Hierarchy

In SQL ServerSQL Servergli indici spaziali vengono compilati utilizzando alberi B, pertanto gli indici devono rappresentare i dati spaziali bidimensionali nell'ordine lineare degli alberi B.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. Pertanto, prima della lettura di dati in un indice spaziale, SQL ServerSQL Server consente di implementare una scomposizione gerarchica uniforme dello spazio.Therefore, before reading data into a spatial index, SQL ServerSQL Server implements a hierarchical uniform decomposition of space. Il processo di creazione dell'indice scompone lo spazio in una gerarchia di grigliea quattro livelli.The index-creation process decomposes the space into a four-level grid hierarchy. Questi livelli vengono indicati come livello 1 (il livello principale), livello 2, livello 3e livello 4.These levels are referred to as level 1 (the top level), level 2, level 3, and level 4.

Ogni livello successivo scompone ulteriormente il livello precedente, pertanto ogni cella di livello superiore contiene una griglia completa al livello successivo.Each successive level further decomposes the level above it, so each upper-level cell contains a complete grid at the next level. Su un livello specificato, tutte le griglie hanno lo stesso numero di celle lungo entrambi gli assi (ad esempio, 4x4 o 8x8) e le celle hanno tutte la stessa dimensione.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.

Nell'illustrazione seguente viene mostrata la scomposizione per la cella in alto destra a ogni livello della gerarchia di griglie in una griglia da 4x4.The following illustration shows the decomposition for the upper-right cell at each level of the grid hierarchy into a 4x4 grid. In realtà, tutte le celle vengono scomposte in questo modo.In reality, all the cells are decomposed in this way. Quindi, ad esempio, scomponendo uno spazio in quattro livelli di griglie 4x4 si produce un totale di 65.536 celle a quattro livelli.Thus, for example, decomposing a space into four levels of 4x4 grids actually produces a total of 65,536 level-four cells.

Quattro livelli di mosaico ricorsivoFour-levels of recursive tessellation

Nota

La scomposizione dello spazio per un indice spaziale è indipendente dall'unità di misura utilizzata dai dati dell'applicazione.The decomposition of space for a spatial index is independent of the unit of measurement that the application data uses.

Le celle di una gerarchia di griglie sono numerate in modo lineare tramite una variazione della curva di riempimento dello spazio di Hilbert.Grid hierarchy cells are numbered in a linear fashion by using a variation of the Hilbert space-filling curve. Tuttavia, a scopo illustrativo, viene utilizzata una semplice numerazione per riga, invece della numerazione effettivamente prodotta dalla curva di Hilbert.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. Nell'illustrazione seguente molti poligoni che rappresentano edifici e linee che rappresentano strade sono già stati posizionati in una griglia 4x4 di livello 1.In the following illustration, several polygons that represent buildings, and lines that represent streets, have already been placed into a 4x4, level-1 grid. Le celle di 1 livello sono numerate da 1 a 16 partendo dalla cella in alto a sinistra.The level-1 cells are numbered from 1 through 16, starting with the upper-left cell.

Poligoni e linee posizionati in una griglia 4x4 di livello 1Polygons and lines placed into a 4x4 level-1 grid

Densità della grigliaGrid Density

Il numero di celle lungo gli assi di una griglia ne determina densità. Maggiore è il numero di celle, più densa è la griglia.The number of cells along the axes of a grid determines its density: the larger the number, the denser the grid. Ad esempio, una griglia 8x8 (che crea 64 celle) è più densa di una griglia 4x4 (che crea 16 celle).For example, an 8x8 grid (which produces 64 cells), is denser than a 4x4 grid (which produces 16 cells). La densità della griglia è definita per ogni livello.Grid density is defined on a per-level basis.

L'istruzione CREATE SPATIAL INDEX Transact-SQLTransact-SQL supporta una clausola GRIDS che consente di specificare diverse densità di griglia a livelli differenti.The CREATE SPATIAL INDEX Transact-SQLTransact-SQL statement supports a GRIDS clause that enables you to specify different grid densities at different levels. La densità della griglia per un determinato livello viene specificata utilizzando una delle parole chiave seguenti.The grid density for a given level is specified by using one of the following keywords.

Parola chiaveKeyword Configurazione della grigliaGrid configuration Numero di celleNumber of cells
LOWLOW 4X44X4 1616
MEDIUMMEDIUM 8X88X8 6464
HIGHHIGH 16X1616X16 256256

Quando in SQL ServerSQL Serveril livello di compatibilità del database è impostato su 100 o su un valore inferiore, l'impostazione predefinita è MEDIUM in tutti i livelli.In SQL ServerSQL Server, when the database compatibility level is set to 100 or lower, then the default is MEDIUM on all levels. Quando il livello di compatibilità del database è impostato su 110 o su un valore superiore, l'impostazione predefinita è uno schema a griglia automatica.When the database compatibility level is set to 110 or higher, then the default is an auto grid scheme. Griglia automatica indica una configurazione di livello 8 di HLLLLLLL. Invece di variare la densità della griglia di indice, si possono modificare le celle per oggetto e le celle dell'intervallo di query per oggetto tramite hint.(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.

È possibile controllare il processo di scomposizione specificando densità della griglia non predefinite.You can control the decomposition process by specifying non-default grid densities. Diverse densità della griglia a livelli diversi, ad esempio, potrebbero essere utili per l'ottimizzazione di un indice in base alle dimensioni dello spazio indicizzato e agli oggetti nella colonna spaziale.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.

Nota

Le densità della griglia di un indice spaziale sono visibili nelle colonne level_1_grid, level_2_grid, level_3_grid e level_4_grid della vista del catalogo sys.spatial_index_tessellations quando il livello di compatibilità del database è impostato su 100 o su un valore inferiore.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. Le opzioni dello schema a mosaico GEOMETRY_AUTO_GRID/GEOGRAPHY_AUTO_GRID non popolano queste colonne.The GEOMETRY_AUTO_GRID/GEOGRAPHY_AUTO_GRID tessellation scheme options do not populate these columns. La vista del catalogo sys.spatial_index_tessellations ha valori NULL per queste colonne quando si usano le opzioni della griglia automatiche.sys.spatial_index_tessellations catalog view has NULL values for these columns when the auto grid options are used.

Suddivisione a mosaico Tessellation

Dopo la scomposizione di uno spazio indicizzato in una gerarchia di griglie, l'indice spaziale legge i dati dalla colonna spaziale, riga per riga.After decomposition of an indexed space into a grid hierarchy, the spatial index reads the data from the spatial column, row by row. Al termine della lettura dei dati per un oggetto spaziale (o istanza), l'indice spaziale esegue un processo di suddivisione a mosaico per l'oggetto.After reading the data for a spatial object (or instance), the spatial index performs a tessellation process for that object. Il processo di suddivisione a mosaico adatta l'oggetto alla gerarchia di griglie associandolo a un set di celle della griglia interessate dall'oggetto stesso (celle interessate).The tessellation processfits the object into the grid hierarchy by associating the object with a set of grid cells that it touches (touched cells). Partendo dal livello 1 della gerarchia di griglie, la suddivisione a mosaico procede prima in profondità attraverso il livello.Starting at level 1 of the grid hierarchy, the tessellation process proceeds breadth first across the level. Potenzialmente, il processo può continuare per tutti i quattro livelli, uno dopo l'altro.Potentially, the process can continue through all four levels, one level at a time.

L'output del processo a mosaico è un set di celle interessate registrate nell'indice spaziale per l'oggetto.The output of the tessellation process is a set of touched cells that are recorded in the spatial index for the object. Riferendosi a queste celle registrate, l'indice spaziale può trovare l'oggetto nello spazio in relazione ad altri oggetti nella colonna spaziale che sono archiviati anche nell'indice.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.

Regole della suddivisione a mosaicoTessellation Rules

Per limitare il numero di celle interessate registrate per un oggetto, nel processo di suddivisione a mosaico vengono applicate diverse regole,To limit the number of touched cells that are recorded for an object, the tessellation process applies several tessellation rules. che permettono di determinare la profondità del processo e indicare quali delle celle interessate devono essere registrate nell'indice.These rules determine the depth of the tessellation process and which of the touched cells are recorded in the index.

Le regole sono le seguenti:These rules are as follows:

  • Regola di coperturaThe covering rule

    Se l'oggetto copre completamente una cella, tale cella viene definita coperta dall'oggetto.If the object completely covers a cell, that cell is said to be covered by the object. Una cella coperta viene inserita nel conteggio e non viene suddivisa a mosaico.A covered cell is counted and is not tessellated. Questa regola è valida per tutti i livelli della gerarchia di griglie.This rule applies at all levels of the grid hierarchy. La regola di copertura semplifica il processo a mosaico e riduce la quantità di dati registrata da un indice spaziale.The covering rule simplifies the tessellation process and reduces the amount of data that a spatial index records.

  • Regola delle celle per oggettoThe cells-per-object rule

    Questa regola stabilisce il limite di celle per oggettoe determina il numero massimo di celle che possono essere conteggiate per ogni oggetto, a eccezione del livello 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. A livelli inferiori, la regola delle celle per oggetto consente di controllare la quantità di informazioni che possono essere registrate sull'oggetto.At lower levels, the cells-per-object rule controls the amount of information that can be recorded about the object.

  • Regola della cella più in bassoThe deepest-cell rule

    La regola della cella più in basso genera la migliore approssimazione di un oggetto registrando solo le celle più in basso suddivise a mosaico per l'oggetto.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. Le celle padre non contribuiscono al conteggio celle per oggetto e non sono registrate nell'indice.Parent cells do not contribute to the cells-per-object count, and they are not recorded in the index.

    Queste regole vengono applicate in modo ricorsivo a ogni livello della griglia.These tessellation rules are applied recursively on each grid level. Nella parte restante di questa sezione vengono descritte le regole in maggiore dettaglio.The rest of this section describes the tessellation rules in more detail.

Regola di coperturaCovering Rule

Se un oggetto copre completamente una cella, quella cella viene definita coperta dall'oggetto.If an object completely covers a cell, that cell is said to be covered by the object. Ad esempio, nell'illustrazione seguente, una delle celle di secondo livello, 15.11, è completamente coperta dalla parte centrale di un ottagono.For example, in the following illustration, one of the second-level cells, 15.11, is completely covered by the middle portion of an octagon.

Ottimizzazione della coperturaCovering optimization

Una cella coperta viene inserita nel conteggio e registrata nell'indice e non è più suddivisa a mosaico.A covered cell is counted and recorded in the index, and the cell is not tessellated any further.

Regola delle celle per oggettoCells-Per-Object Rule

L'entità della suddivisione a mosaico di ogni oggetto dipende principalmente dal limite di celle per oggetto dell'indice spaziale.The extent of tessellation of each object depends primarily on the cells-per-object limit of the spatial index. Questo limite definisce il numero massimo di celle che la suddivisione a mosaico può conteggiare per ogni oggetto.This limit defines the maximum number of cells that tessellation can count per object. Tuttavia la regola delle celle per oggetto non viene applicata per il livello 1, pertanto è possibile superare questo limite.Note, however, that the cells-per-object rule is not enforced for level 1, so it is possible to exceed this limit. Se il livello 1 raggiunge o supera il limite di celle per oggetto, non si verifica alcun altro inserimento nel mosaico ai livelli inferiori.If the level-1 count reaches, or exceeds, the cells-per-object limit, no further tessellation occurs at the lower levels.

Finché il conteggio è inferiore al limite di celle per oggetto, il processo a mosaico continua.As long as the count is less than the cells-per-object limit, the tessellation process continues. Partendo dalla cella interessata con il numero più basso (ad esempio, cella 15.6 nell'illustrazione precedente), ogni cella viene testata durante il processo per valutare se conteggiarla o suddividerla a mosaico.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. Se la suddivisione di una cella a mosaico determina il superamento del limite di celle per oggetto, la cella viene conteggiata e non viene suddivisa a mosaico;If tessellating a cell would exceed the cells-per-object limit, the cell is counted and not tessellated. in caso contrario è suddivisa a mosaico e le celle di livello inferiore interessate dall'oggetto vengono conteggiate.Otherwise, the cell is tessellated, and the lower-level cells that are touched by the object are counted. Il processo continua in questo modo, nel senso della larghezza, attraverso il livelloThe tessellation process continues in this way, breadth-wise, across the level. e viene ripetuto in modo ricorsivo per le griglie di livello inferiore delle celle a mosaico fino al raggiungimento del limite oppure al conteggio di tutte le celle.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.

Ad esempio, nell'illustrazione precedente viene mostrato un ottagono che si inserisce perfettamente nella cella 15 della griglia di livello 1.For example, consider the preceding illustration, which shows an octagon that fits completely into cell 15 of the level-1 grid. Nella figura, la cella 15 è stata suddivisa a mosaico, sezionando l'ottagono in nove celle di livello 2.In the figure, cell 15 has been tessellated, dissecting the octagon into nine level-2 cells. In questa illustrazione si presuppone che il limite di celle per oggetto sia 9 o più.This illustration assumes that the cells-per-object limit is 9 or more. Se tuttavia il limite di celle per oggetto è pari o inferiore a 8, la cella 15 non viene suddivisa e viene conteggiata da sola per l'oggetto.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.

Per impostazione predefinita il limite di celle per oggetto è pari a 16, una soluzione intermedia soddisfacente tra spazio e precisione per la maggior parte di indici spaziali.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. Tuttavia, l'istruzione CREATE SPATIAL INDEX Transact-SQLTransact-SQL supporta una clausola CELLS_PER_OBJECT=n che consente di specificare un limite di celle per oggetto compreso tra 1 e 8192 inclusi.However, the CREATE SPATIAL INDEX Transact-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.

Nota

L'impostazione cells_per_object di un indice spaziale è visibile nella vista del catalogo sys.spatial_index_tessellations .The cells_per_object setting of a spatial index is visible in the sys.spatial_index_tessellations catalog view.

Regola della cella più in bassoDeepest-Cell Rule

La regola della cella più in basso sfrutta il fatto che ogni cella di livello inferiore appartiene alla cella a essa superiore: una cella di livello 4 appartiene a una cella di livello 3, una cella di livello 3 appartiene a una cella di livello 2 e una cella di livello 2 appartiene a una cella di livello 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. Un oggetto che appartiene alla cella 1.1.1.1, ad esempio, appartiene anche alle celle 1.1.1, 1.1 e 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. Il riconoscimento di tali relazioni gerarchiche tra celle è incorporata in Query Processor.Knowledge of such cell-hierarchy relationships is built into the query processor. Pertanto, solo le celle di livello più basso devono essere registrate nell'indice, rendendo minime le informazioni da archiviare.Therefore, only the deepest-level cells need to be recorded in the index, minimizing the information that the index needs to store.

Nell'illustrazione seguente, un poligono a forma di diamante relativamente piccolo è suddiviso a mosaico.In the following illustration, a relatively small diamond-shaped polygon is tessellated. L'indice utilizza il limite di celle per oggetto predefinito di 16 che non è raggiunto per questo piccolo oggetto.The index uses the default cells-per-object limit of 16, which is not reached for this small object. La suddivisione a mosaico, pertanto, continua fino al livello 4.Therefore, tessellation continues down to level 4. Il poligono si trova nelle celle comprese tra il livello 1 e il livello 3 seguenti: 4, 4.4 e 4.4.10 e 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. Utilizzando la regola della cella più in basso, tuttavia, nella suddivisione a mosaico vengono contate solo le 12 celle di livello 4: 4.4.10.13-15 e 4.4.14.1-3, 4.4.14.5-7 e 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.

Ottimizzazione della cella più in bassoDeepest-cell optimization

Schemi a mosaico Tessellation Schemes

Il comportamento di un indice spaziale dipende parzialmente dal relativo schema a mosaico.The behavior of a spatial index depends partly on its tessellation scheme. Lo schema a mosaico è specifico per il tipo di dati.The tessellation scheme is data-type specific. In SQL ServerSQL Servergli indici spaziali supportano due schemi a mosaico:In SQL ServerSQL Server, spatial indexes support two tessellation schemes:

  • Mosaico per griglia di geometria, ovvero lo schema per il tipo di dati geometry .Geometry grid tessellation, which is the scheme for the geometry data type.

  • Mosaico per griglia di geografiache si applica a colonne del tipo di dati geografia .Geography grid tessellation, which applies to columns of the geography data type.

Nota

L'impostazione tessellation_scheme di un indice spaziale è visibile nella vista del catalogo sys.spatial_index_tessellations .The tessellation_scheme setting of a spatial index is visible in the sys.spatial_index_tessellations catalog view.

Schema a mosaico per griglia di geometriaGeometry Grid Tessellation Scheme

Lo schema a mosaico GEOMETRY_AUTO_GRID è lo schema a mosaico predefinito per il tipo di dati geometry per SQL ServerSQL Server e versioni successive.GEOMETRY_AUTO_GRID tessellation is the default tessellation scheme for the geometry data type for SQL ServerSQL Server and later. Lo schema a mosaico GEOMETRY_GRID è l'unico schema a mosaico disponibile per il tipo di dati geometry in SQL ServerSQL Server.GEOMETRY_GRID tessellation is the only tessellation scheme available for geometry data types in SQL ServerSQL Server. In questa sezione vengono trattati alcuni aspetti della suddivisione a mosaico per la griglia di geometria che sono rilevanti per l'utilizzo di indici spaziali, ovvero i metodi e i rettangoli di selezione supportati.This section discusses aspects of geometry grid tessellation that are relevant to working with spatial indexes: supported methods and bounding boxes.

Nota

È possibile specificare in modo esplicito questo schema a mosaico con la clausola USING (GEOMETRY_AUTO_GRID/GEOMETRY_GRID) dell'istruzione CREATE SPATIAL INDEX Transact-SQLTransact-SQL .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.

RiquadroThe Bounding Box

I dati geometrici occupano un piano che può essere infinito.Geometric data occupies a plane that can be infinite. In SQL ServerSQL Server, tuttavia, un indice spaziale richiede uno spazio finito.In SQL ServerSQL Server, however, a spatial index requires a finite space. Per stabilire uno spazio finito per la scomposizione, lo schema a mosaico per la griglia di geometria richiede un riquadrorettangolare.To establish a finite space for decomposition, the geometry grid tessellation scheme requires a rectangular bounding box. Il rettangolo di selezione è definito da quattro coordinate, (x-min,y-min) e (x-max,y-max), che sono archiviate come proprietà dell'indice spaziale.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. Queste coordinate rappresentano gli elementi seguenti:These coordinates represent the following:

  • x-min è la coordinata x dell'angolo inferiore sinistro del rettangolo di selezione.x-min is the x-coordinate of the lower-left corner of the bounding box.

  • y-min è la coordinata y dell'angolo inferiore sinistro.y-min is the y-coordinate of the lower-left corner.

  • x-max è la coordinata x dell'angolo superiore destro.x-max is the x-coordinate of the upper-right corner.

  • y-max è la coordinata y dell'angolo superiore destro.y-max is the y-coordinate of upper-right corner.

Nota

Queste coordinate sono specificate dalla clausola BOUNDING_BOX dell'istruzione Transact-SQLTransact-SQL CREATE SPATIAL INDEX.These coordinates are specified by the BOUNDING_BOX clause of the CREATE SPATIAL INDEX Transact-SQLTransact-SQL statement.

Le coordinate (x-min,y-min) e (x-max,y-max) determinano la posizione e le dimensioni del rettangolo di selezione.The (x-min,y-min) and (x-max,y-max) coordinates determine the placement and dimensions of the bounding box. Lo spazio al di fuori del riquadro viene considerato come una cella unica numerata con 0.The space outside of the bounding box is treated as a single cell that is numbered 0.

L'indice spaziale scompone lo spazio nel riquadro.The spatial index decomposes the space inside the bounding box. che viene riempito dalla griglia di livello 1 della gerarchia di griglie.The level-1 grid of the grid hierarchy fills the bounding box. Per posizionare un oggetto geometrico nella gerarchia di griglie, l'indice spaziale confronta le coordinate dell'oggetto con quelle del riquadro.To place a geometric object in the grid hierarchy, the spatial index compares the coordinates of the object to the bounding-box coordinates.

La figura seguente illustra i punti definiti dalle coordinate (x-min,y-min) e (x-max,y-max) del rettangolo di selezione.The following illustration shows the points defined by the (x-min,y-min) and (x-max,y-max) coordinates of the bounding box. Il livello superiore della gerarchia di griglie viene mostrato come una griglia 4x4.The top-level of the grid hierarchy is shown as a 4x4 grid. Ai fini dell'illustrazione, i livelli inferiori sono omessi.For the purpose of illustration, the lower levels are omitted. Lo spazio al di fuori del riquadro è indicato da uno zero (0).The space outside of the bounding box is indicated by a zero (0). L'oggetto 'A' si estende in parte oltre il riquadro e l'oggetto 'B' si trova completamente al di fuori del riquadro nella cella 0.Note that object 'A' extends partly beyond the box, and object 'B' lies completely outside the box in cell 0.

Rettangolo di selezione contenente le coordinate e la cella 0.Bounding box showing coordinates and cell 0.

Un riquadro corrisponde ad alcune parti dei dati spaziali di un'applicazione.A bounding box corresponds to some portion of an application's spatial data. In base all'applicazione, il riquadro dell'indice può contenere tutti o solo una parte dei dati archiviati nella colonna spaziale.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. Solo le operazioni calcolate su oggetti che sono completamente inseriti nel riquadro traggono vantaggio dall'indice spaziale.Only operations computed on objects that are entirely inside of the bounding box benefit from the spatial index. Per ottenere il massimo vantaggio da un indice spaziale in una colonna geometry , è quindi necessario specificare un riquadro che contenga tutti o la maggior parte degli oggetti.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.

Nota

Le densità della griglia di un indice spaziale sono visibili nelle colonne bounding_box_xmin, bounding_box_ymin, bounding_box_xmax e bounding_box_ymax della vista del catalogo sys.spatial_index_tessellations .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.

Schema a mosaico per la griglia di geografiaThe Geography Grid Tessellation Scheme

Questo schema a mosaico si applica solo a una colonna geography .This tessellation scheme applies only to a geography column. In questa sezione vengono riepilogati i metodi supportati dal mosaico della griglia di geografia e discusso il modo in cui lo spazio geodetico è proiettato su un piano scomposto in una gerarchia di griglie.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.

Nota

È possibile specificare in modo esplicito questo schema a mosaico con la clausola USING (GEOGRAPHY_AUTO_GRID/GEOGRAPHY_GRID) dell'istruzione CREATE SPATIAL INDEX Transact-SQLTransact-SQL .You can explicitly specify this tessellation scheme by using the USING (GEOGRAPHY_AUTO_GRID/GEOGRAPHY_GRID) clause of the CREATE SPATIAL INDEX Transact-SQLTransact-SQL statement.

Proiezione dello spazio geodetico su un pianoProjection of the Geodetic Space onto a Plane

I calcoli sulle istanze (oggetti) geography considerano lo spazio che contiene gli oggetti come un ellissoide geodetico.Computations on geography instances (objects) treat the space containing the objects as a geodetic ellipsoid. Per scomporre questo spazio lo schema a mosaico della griglia di geografia divide la superficie dell'ellissoide negli emisferi superiori e inferiori e quindi esegue i passaggi seguenti: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. Proiezione di ogni emisfero sui facet di una piramide del quadrilatero.Projects each hemisphere onto the facets of a quadrilateral pyramid.

  2. Appiattimento delle due piramidi.Flattens the two pyramids.

  3. Unione delle piramidi piatte per formare un piano non euclideo.Joins the flattened pyramids to form a non-Euclidean plane.

    Nell'illustrazione seguente viene mostrata una vista schematica del processo di scomposizione a tre passaggi.The following illustration shows a schematic view of the three-step decomposition process. Nelle piramidi, le linee punteggiate rappresentano i limiti dei quattro facet di ogni piramide.In the pyramids, the dotted lines represent the boundaries of the four facets of each pyramid. I passaggi 1 e 2 illustrano l'ellissoide geodetico, utilizzando una linea verde orizzontale per rappresentare la linea longitudinale dell'equatore e una serie di linee verdi verticali per rappresentare diverse linee della latitudine.Steps 1 and 2 illustrate the geodetic ellipsoid, using a green horizontal line to represent the equatorial longitude line and a series of green vertical lines to represent several latitude lines. Il passaggio 1 mostra le piramidi proiettate sui due emisferi.Step 1 shows the pyramids being projected over the two hemispheres. Il passaggio 2 mostra le piramidi appiattite.Step 2 shows the pyramids being flattened. Il passaggio 3 illustra le piramidi bidimensionali, dopo che sono state combinate per formare un piano, mostrando un certo numero di linee longitudinali proiettate.Step 3 illustrates the flattened pyramids, after they have been combined to form a plane, showing a number of projected longitude lines. Queste linee proiettate sono dritte e di lunghezza diversa, a seconda di dove cadono sulle piramidi.Notice that these projected lines are straightened and vary in length, depending on where they fall on the pyramids.

    Proiezione dell'ellissoide in un pianoProjection of the ellipsoid onto a plane

    Una volta che lo spazio è stato proiettato sul piano, questo viene scomposto in una gerarchia di griglie a quattro livelli.Once the space has been projected onto the plane, the plane is decomposed into the four-level grid hierarchy. Livelli diversi possono utilizzare densità della griglia differenti.Different levels can use different grid densities. Nell'illustrazione seguente viene mostrato il piano dopo essere stato scomposto in una griglia a 1 livello 4x4.The following illustration shows the plane after it has been decomposed into a 4x4 level-1 grid. Ai fini dell'illustrazione, i livelli inferiori della gerarchia di griglie sono omessi.For the purposes of illustration, the lower-levels of the grid hierarchy are omitted. In effetti, il piano è completamente scomposto in una gerarchia di griglie a quattro livelli.In actuality, the plane is fully decomposed into a four-level grid hierarchy. Al termine del processo di scomposizione, i dati geografici vengono letti, riga per riga, dalla colonna relativa e il processo a mosaico viene eseguito per ogni oggetto.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.

    Griglia geografica livello 1Level-1 geography grid

Metodi supportati dagli indici spaziali Methods Supported by Spatial Indexes

Metodi di geometria supportati da indici spaziali Geometry Methods Supported by Spatial Indexes

In alcuni casi, gli indici spaziali supportano i metodi geometry orientati ai set seguenti: STContains(), STDistance(), STEquals(), STIntersects(), STOverlaps(), STTouches() e STWithin().Spatial indexes support the following set-oriented geometry methods under certain conditions: STContains(), STDistance(), STEquals(), STIntersects(), STOverlaps(), STTouches(), and STWithin(). Per essere supportati da un indice spaziale questi metodi devono essere utilizzati all'interno della clausola WHERE o JOIN ON di una query e devono verificarsi all'interno di un predicato del seguente form generale: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:

geometry1.method_name(geometry2)comparison_operatorvalid_numbergeometry1.method_name(geometry2)comparison_operatorvalid_number

Per ottenere un risultato non Null, geometry1 e geometry2 devono avere lo stesso identificatore SRID (Spatial Reference Identifier).To return a non-null result, geometry1 and geometry2 must have the same spatial reference identifier (SRID). In caso contrario, il metodo restituisce NULL.Otherwise, the method returns NULL.

Gli indici spaziali supportano i seguenti form di predicato:Spatial indexes support the following predicate forms:

Metodi di geografia supportati da indici spaziali Geography Methods Supported by Spatial Indexes

In alcuni casi, gli indici spaziali supportano i metodi geography orientati ai set seguenti: STIntersects(),STEquals() e STDistance().Under certain conditions, spatial indexes support the following set-oriented geography methods: STIntersects(),STEquals(), and STDistance(). Per essere supportati da un indice spaziale questi metodi devono essere utilizzati all'interno della clausola WHERE di una query e devono verificarsi all'interno di un predicato del seguente form generale: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:

geography1.method_name(geography2)comparison_operatorvalid_numbergeography1.method_name(geography2)comparison_operatorvalid_number

Per ottenere un risultato non Null, geography1 e geography2 devono avere lo stesso identificatore SRID (Spatial Reference Identifier).To return a non-null result, geography1 and geography2 must have the same Spatial Reference Identifier (SRID). In caso contrario, il metodo restituisce NULL.Otherwise, the method returns NULL.

Gli indici spaziali supportano i seguenti form di predicato:Spatial indexes support the following predicate forms:

Query con indici spazialiQueries that use Spatial Indexes

Gli indici spaziali sono supportati solo nelle query che includono un operatore spaziale indicizzato nella clausola WHERE .Spatial indexes are only supported in queries that include an indexed spatial operator in the WHERE clause. Ad esempio, la sintassi seguente:For example syntax such as:

[spatial object].SpatialMethod([reference spatial object]) [ = | < ] [const literal or variable]  

Query Optimizer riconosce la commutatività di operazioni spaziali ( @a.STIntersects(@b) = @b.STInterestcs(@a) ).The query optimizer understands the commutativity of spatial operations (that @a.STIntersects(@b) = @b.STInterestcs(@a) ). Tuttavia, l'indice spaziale non verrà utilizzato se l'inizio di un confronto non contiene l'operatore spaziale (ad esempio WHERE 1 = spatial op non utilizzerà l'indice spaziale).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). Per utilizzare l'indice spaziale, riscrivere il confronto (ad esempio WHERE spatial op = 1).To use the spatial index, rewrite the comparison (for example WHERE spatial op = 1).

Analogamente a qualsiasi altro indice, quando è supportato un indice spaziale, l'utilizzo di quest'ultimo viene scelto in base al costo, pertanto tramite Query Optimizer non è possibile scegliere di utilizzare l'indice spaziale anche se vengono soddisfatti tutti i requisiti per utilizzarlo.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. Utilizzare showplan per verificare se l'indice spaziale è stato utilizzato e, se necessario, specificare gli hint per la query per forzare un piano di query desiderato.Use showplan to see if the spatial index was used and if necessary provide query hints to force a desired query plan.

Il tipo adiacente più prossimo di query supporta anche gli indici spaziali, tuttavia solo se viene scritta una sintassi di query specifica.The nearest neighbor type of query also supports spatial indexes however only if a specific query syntax is written. La sintassi appropriata è: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) [;]  

Vedere ancheSee Also

Dati spaziali (SQL Server)Spatial Data (SQL Server)