Información general sobre los índices espaciales

SQL Server 2008 y versiones posteriores admiten datos espaciales. Esto incluye la compatibilidad para un tipo de datos espaciales planos, geometry, que admite datos geométricos (puntos, líneas y polígonos) dentro de un sistema de coordenadas euclidiano. El tipo de datos geography representa objetos geográficos de una área en la superficie de la Tierra, como una extensión de terreno. Un índice espacial de una columna geography asigna los datos geográficos a un espacio bidimensional, no euclidiano.

Un índice espacial se define en una columna de tabla que contiene datos espaciales (una columna espacial). Cada índice espacial hace referencia a un espacio finito. Por ejemplo, un índice para una columna geometry hace referencia a una área rectangular especificada por el usuario en un plano.

Descomponer espacio indizado en una jerarquía de cuadrículas

En SQL Server 2008, los índices espaciales se generan usando árboles b, lo que significa que los índices deben representar los datos espaciales bidimensionales en el orden lineal de los árboles b. Por consiguiente, antes de leer los datos en un índice espacial, SQL Server 2008 implementa una descomposición uniforme jerárquica de espacio. El proceso de creación de índices descompone el espacio en una jerarquía de cuadrículas de cuatro niveles. Estos niveles se conocen como nivel 1 (el nivel superior), nivel 2, nivel 3 y nivel 4.

Cada nivel sucesivo descompone el nivel superior, de manera que cada celda de nivel superior contiene una cuadrícula completa en el nivel siguiente. En un nivel determinado, todas las cuadrículas tienen el mismo número de celdas a lo largo de ambos ejes (por ejemplo, 4x4 o 8x8) y las celdas son todas del mismo tamaño.

La ilustración siguiente muestra la descomposición para la celda superior derecha en cada nivel de la jerarquía de cuadrículas en una cuadrícula 4x4. En realidad, todas las celdas se descomponen de esta manera. Así, por ejemplo, la descomposición de un espacio en cuatro niveles de cuadrículas 4x4 produce realmente un total de 65.536 celdas de cuatro niveles.

Cuatro niveles de teselación recursiva

Nota

La descomposición de espacio para un índice espacial es independiente de la unidad de medida que el dato de aplicación usa.

Las celdas de una jerarquía de cuadrícula se enumeran de un modo lineal usando una variación de la curva de rellenado de espacio Hilbert. Para esta ilustración, sin embargo, esta discusión usa una numeración de modo de fila simple, en lugar de la numeración realmente generada por la curva de Hilbert. En la ilustración siguiente, ya se han colocado varios polígonos que representan edificios y líneas que representan calles en una cuadrícula de 1 nivel 4x4. Las celdas de 1 nivel se numeran del 1 al 16, comenzando por la celda superior izquierda.

Polígonos y líneas colocados en una cuadrícula de nivel 1 4x4

Densidad de cuadrícula

El número de celdas a lo largo de los ejes de una cuadrícula determina su densidad: cuanto mayor sea el número, más densa será la cuadrícula. Por ejemplo, una cuadrícula 8x8 (que genera 64 celdas), es más densa que una cuadrícula 4x4 (que genera 16 celdas). La densidad de cuadrícula se define por nivel.

La instrucción Transact-SQLCREATE SPATIAL INDEX admite una cláusula GRIDS que le permite especificar las densidades de cuadrícula diferentes en niveles diferentes. La densidad de cuadrícula para un nivel determinado se especifica con una las palabras clave siguientes:

Palabra clave

Configuración de cuadrícula

Número de celdas

LOW

4X4

16

MEDIUM

8X8

64

HIGH

16X16

256

El valor predeterminado es MEDIUM en todos los niveles.

Puede controlar el proceso de descomposición especificando densidades de cuadrícula no predeterminadas. Por ejemplo, podrían ser útiles diferentes densidades de cuadrícula en niveles diferentes para ajustar bien un índice basado en el tamaño del espacio indizado y los objetos de la columna espacial.

Nota

Las densidades de cuadrícula de un índice espacial están visibles en las columnas level_1_grid, level_2_grid, level_3_grid y level_4_grid de la vista de catálogo sys.spatial_index_tessellations.

Teselación

Después de la descomposición de un espacio indizado en una jerarquía de cuadrículas, el índice espacial lee los datos de la columna espacial, fila por fila. Después de leer los datos para un objeto espacial (o instancia), el índice espacial realiza un proceso de teselación para dicho objeto. El proceso de teselación ajusta el objeto en la jerarquía de cuadrículas asociando el objeto a un conjunto de celdas de cuadrícula que modifica (celdas modificadas). Comenzando por el nivel 1 de la jerarquía de cuadrículas, el proceso de teselación continúa por el nivel primero a lo ancho. Potencialmente, el proceso puede continuar a través de los cuatro niveles, un nivel a la vez.

El resultado del proceso de teselación es un conjunto de celdas modificadas que se graban en el índice espacial para el objeto. Haciendo referencia a estas celdas grabadas, el índice espacial puede buscar el objeto en el espacio relativo a otros objetos de la columna espacial también almacenados en el índice.

Reglas de teselación

Para limitar el número de celdas modificadas que se graban para un objeto, el proceso teselación aplica varias reglas de teselación. Estas reglas determinan la profundidad del proceso de teselación y cuáles de las celdas modificadas se graban en el índice.

Estas reglas son:

  • La regla de cobertura

    Si el objeto cubre una celda por completo, se dice que dicha celda está cubierta por el objeto. Se cuenta una celda cubierta y no se aplica la teselación. Esta regla se aplica a todos los niveles de la jerarquía de cuadrículas. La regla de cobertura simplifica el proceso de teselación y reduce la cantidad de datos que un índice espacial registra.

  • La regla de celdas por proyecto

    Esta regla exige el límite de celdas por proyecto, que determina el número máximo de celdas que se pueden contar para cada objeto, excepto en el nivel 1. En los niveles inferiores, la regla de celdas por proyecto controla la cantidad de información que se puede grabar sobre el objeto.

  • La regla de celda más profunda

    La regla de celda más profunda genera la mejor aproximación de un objeto grabando sólo las únicas celdas que se encuentran en la parte más inferior que se han dividido en mosaicos para el objeto. Las celdas principales no contribuyen al recuento de celdas por objeto y no se graban en el índice.

Estas reglas de teselación se aplican en cada nivel de cuadrícula de forma recursiva. El resto de esta sección describe las reglas de teselación con más detalle.

Regla de cobertura

Si un objeto cubre una celda por completo, se dice que dicha celda está cubierta por el objeto. Por ejemplo, en la ilustración siguiente, una de las celdas de segundo nivel, 15.11, está cubierta completamente por la parte media de un octágono.

Optimización de cobertura

Se cuenta una celda cubierta y se graba en el índice, y la celda no se divide más en mosaicos.

Regla de celdas por proyecto

El nivel de teselación de cada objeto depende principalmente del límite de celdas por proyecto del índice espacial. Este límite define el número máximo de celdas que la teselación puede contar por objeto. Sin embargo, tenga en cuenta que la regla de celdas por proyecto no se exige para el nivel 1, de modo que es posible superar este límite. Si el recuento del nivel 1 alcanza, o supera, el límite de celdas por objeto, no se produce más teselación en los niveles inferiores.

Siempre que el recuento sea menor que el límite de celdas por proyecto, el proceso de teselación continúa. Empezando por la celda modificada de número inferior (por ejemplo, la celda 15.6 de la ilustración anterior), el proceso prueba todas las celdas para evaluar si contarlas o dividirlas en mosaicos. Si con la teselación de una celda se superaría el límite de celdas por proyecto, se cuenta la celda y no se realiza su teselación. De lo contrario, la celda se divide en mosaicos y se cuentan las celdas de nivel inferior modificadas por el objeto. El proceso de teselación continúa de esta manera, en toda la amplitud, por el nivel. Este proceso se repite recursivamente para las cuadrículas de nivel inferior de las celdas divididas en mosaicos hasta que se alcanza el límite o no hay más celdas que contar.

Por ejemplo, piense en la ilustración anterior, que muestra un octágono que se ajusta por completo a la celda 15 de la cuadrícula de nivel 1. En la ilustración, se ha realizado la teselación en la celda 15, diseccionando el octágono en nueve celdas de nivel 2. Esta ilustración supone que el límite de celdas por proyecto es 9 o más. Sin embargo, si el límite de celdas por proyecto fuera 8 o menos, no se realizaría la teselación en la celda 15 y sólo se contaría dicha celda 15 para el objeto.

De forma predeterminada, el límite de celdas por proyecto es de 16 celdas por objeto, lo que proporciona un equilibrio satisfactorio entre espacio y precisión para la mayoría de los índices espaciales. Sin embargo, la instrucción Transact-SQLCREATE SPATIAL INDEX admite una cláusula CELLS_PER_OBJECT**=**n que le permite especificar un límite de celdas por proyecto entre 1 y 8192, incluidos.

Nota

El valor celdas por proyecto de un índice espacial está visible en la vista de catálogo sys.spatial_index_tessellations.

Regla de celda más profunda

La regla de celda más profunda se aprovecha del hecho de que todas las celdas de nivel inferior pertenecen a la celda superior: una celda de nivel 4 pertenece a una celda de nivel 3, una celda de nivel 3 pertenece a una celda de nivel 2 y una celda de nivel 2 pertenece a una celda de nivel 1. Por ejemplo, un objeto que pertenece a la celda 1.1.1.1 también pertenece a la celda 1.1.1, la celda 1.1 y la celda 1. El conocimiento de dichas relaciones de jerarquía de celdas está integrado en el procesador de consultas. Por consiguiente, sólo las celdas de nivel más profundo se tienen que grabar en el índice, minimizando la información que el índice tiene que almacenar.

En la ilustración siguiente, un polígono en forma de rombo relativamente pequeño se divide en mosaicos. El índice usa el límite de celdas por proyecto predeterminado de 16, que no se alcanza para este objeto pequeño. Por consiguiente, la teselación continúa hasta el nivel 4. El polígono reside en las siguientes celdas de nivel 1 al nivel 3: 4, 4.4, y 4.4.10 y 4.4.14. 4.4.10.13-15, 4.4.14.1-3, 4.4.14.5-7 y 4.4.14.9-11.

Optimización de celda más profunda

Esquemas de teselación

El comportamiento de un índice espacial depende en parte de su esquema de teselación. El esquema de teselación es el tipo de datos concreto. En SQL Server 2008, los índices espaciales admiten dos esquemas de teselación:

  • Teselación de cuadrícula de geometría, que es el esquema para el tipo de datos geometry.

  • Teselación de cuadrícula de geografía, que se aplica a las columnas del tipo de datos geography.

Nota

El valor tessellation_scheme de un índice espacial está visible en la vista de catálogo sys.spatial_index_tessellations.

Esquema de teselación de cuadrícula de geometría

La teselación de cuadrícula de geometría es el esquema de teselación predeterminado para el tipo de datos geometry y, en SQL Server 2008, es el único esquema de teselación de este tipo. En esta sección se tratan los aspectos de teselación de cuadrícula de geometría que son pertinentes para trabajar con índices espaciales: métodos compatibles y cuadros de límite.

Nota

Puede especificar explícitamente este esquema de teselación usando la cláusula USING GEOMETRY_GRID de la instrucción Transact-SQLCREATE SPATIAL INDEX.

Métodos de geometry admitidos

Un índice espacial está pensando para reducir el costo de aplicar métodos orientados a conjuntos a una columna espacial que actúa como un filtro en los objetos. El tipo de datos geometry proporciona métodos integrados para construir instancias de geometry que describen objetos geométricos y para trabajar con dichas instancias. En determinadas condiciones, los índices espaciales son compatibles con varios métodos de geometry y orientados a conjuntos, como STIntersects() y STTouches().

Para obtener más información sobre la compatibilidad proporcionada por índices espaciales para métodos de geometry, vea Métodos de Geometry que los índices espaciales admiten.

El cuadro de límite

Los datos geométricos ocupan un plano que puede ser infinito. Sin embargo, en SQL Server 2008, un índice espacial requiere un espacio finito. Para establecer un espacio finito para descomposición, el esquema de teselación de cuadrícula de geometría exige un cuadro de límite rectangular. El cuadro de límite está definido por cuatro coordenadas, (x-min,y-min) y (x-max,y-max), que se almacenan como propiedades del índice espacial. Estas coordenadas representan lo siguiente:

  • x-min es la coordenada x de la esquina inferior izquierda del cuadro de límite.

  • y-min es la coordenada y de la esquina inferior izquierda.

  • x-max es la coordenada x de la esquina superior derecha.

  • y-max es la coordenada y de la esquina superior derecha.

Nota

Estas coordenadas están especificadas por la cláusula BOUNDING_BOX de la instrucción Transact-SQLCREATE SPATIAL INDEX.

Las coordenadas **(x-min)**y-min y **(x-max)**y-max determinan la posición y las dimensiones del cuadro de límite. El espacio exterior del cuadro de límite se trata como una celda única con el número 0.

El índice espacial descompone el espacio que se encuentra dentro del cuadro de límite. La cuadrícula de nivel 1 de la jerarquía de cuadrículas rellena el cuadro de límite. Para colocar un objeto geométrico en la jerarquía de cuadrículas, el índice espacial compara las coordenadas del objeto con las coordenadas del cuadro de límite.

La ilustración siguiente muestra los puntos definidos por las coordenadas (x-min,y-min) y (x-max,y-max) del cuadro de límite. El nivel superior de la jerarquía de cuadrículas se muestra como una cuadrícula 4x4. Para la ilustración, se omiten los niveles inferiores. Un cero (0) indica el espacio exterior del cuadro de límite. Tenga en cuenta que el objeto 'A' se extiende, en parte, más allá del cuadro y el objeto 'B' permanece por completo fuera del cuadro de la celda 0.

Cuadro de límite que muestra las coordenadas y la celda 0.

Un cuadro de límite se corresponde a alguna parte de los datos espaciales de una aplicación. Depende de la aplicación si el cuadro de límite del índice contiene por completo los datos almacenados en la columna espacial, o sólo contiene una parte. Sólo las operaciones calculadas en los objetos que están completamente dentro del cuadro de límite se benefician del índice espacial. Por consiguiente, para obtener la ventaja máxima de un índice espacial en una columna geometry, es necesario especificar un cuadro de límite que contenga todos los objetos o la mayoría de ellos.

Nota

Las densidades de cuadrícula de un índice espacial están visibles en las columnas bounding_box_xmin, bounding_box_ymin, bounding_box_xmax y bounding_box_ymax de la vista de catálogo sys.spatial_index_tessellations.

El esquema de teselación de cuadrícula de geografía

Este esquema de teselación sólo se aplica a una columna geography. Esta sección resume los métodos admitidos por teselación de cuadrícula de geografía y trata cómo se proyecta el espacio geodésico en un plano, que se descompone a continuación en una jerarquía de cuadrículas.

Nota

Puede especificar explícitamente este esquema de teselación usando la cláusula USING GEOGRAPHY_GRID de la instrucción Transact-SQLCREATE SPATIAL INDEX.

Métodos de geography compatibles

El tipo de datos geography proporciona métodos integrados para crear y usar instancias de geography que describan objetos geográficos. En ciertas condiciones, los índices espaciales son compatibles con los siguientes métodos de geography orientados a conjuntos: STIntersects(),STEquals() y STDistance(). Un índice espacial en una columna de tipo de datos geography filtra los objetos y reduce el rendimiento y el costo de la consulta que supone aplicar estos métodos a los datos espaciales.

Para obtener más información sobre la compatibilidad proporcionada por índices espaciales para métodos de geography, vea Métodos de Geography que admiten los índices espaciales.

Proyección del espacio geodésico en un plano

Los cálculos en instancias de geography (objetos) tratan el espacio que contiene los objetos como un elipsoide geodésico. Para descomponer este espacio, el esquema teselación de cuadrícula geography divide la superficie del elipsoide en sus hemisferios superior e inferior y, a continuación, realiza los pasos siguientes:

  1. Proyecta cada hemisferio en las caras de una pirámide cuadrangular.

  2. Aplana las dos pirámides.

  3. Une las pirámides aplanadas para formar un plano no euclidiano.

La ilustración siguiente muestra una vista esquemática del proceso de descomposición de tres pasos. En las pirámides, las líneas de puntos representan los límites de las cuatro facetas de cada pirámide. Los pasos 1 y 2 muestran el elipsoide geodésico, usando una línea horizontal verde para representar la línea de longitud ecuatorial y una serie de líneas verticales verdes para representar varias líneas de latitud. El paso 1 muestra las pirámides proyectándose sobre los dos hemisferios. El paso 2 muestra las pirámides aplanándose. El paso 3 muestra las pirámides aplanadas, una vez que se han combinado para formar un plano, mostrando varias líneas de longitud proyectadas. Observe que estas líneas proyectadas se ponen rectas y varían en longitud, dependiendo de dónde se encuentra en las pirámides.

Proyección de la elipsoide en un plano

Una vez que se ha proyectado el espacio en el plano, éste se descompone en la jerarquía de cuadrículas de cuatro niveles. Diferentes niveles pueden usar distintas densidades de cuadrícula. La ilustración siguiente muestra el plano una vez se ha descompuesto en una cuadrícula de nivel 1 4x4. Para esta ilustración, se omiten los niveles inferiores de la jerarquía de cuadrículas. En realidad, el plano se descompone totalmente en una jerarquía de cuadrículas de cuatro niveles. Cuando termina el proceso de descomposición, se leen los datos geográficos, fila por fila, desde la columna geography y, a su vez, se lleva a cabo el proceso de teselación para cada objeto.

Cuadrícula de geography de nivel 1

Compatibilidad del índice espacial

Un índice espacial sólo se puede crear en una columna espacial. Puede crear índices espaciales en cualquier columna espacial de una tabla que admita índices espaciales y puede crear varios índices espaciales en una columna espacial determinada. Para obtener más información sobre las restricciones sobre índices espaciales, vea Restricciones en los índices espaciales.