Visão geral de indexação espacial

O SQL Server 2008 e versões posteriores oferecem suporte a dados espaciais. Isso inclui suporte para tipo de dados espaciais planares, geometry, que oferece suporte a dados de geometria, pontos, linhas e polígonos, dentro de um sistema de coordenadas euclidianas. O tipo de dados de geografia representa objetos geográficos em uma área na superfície da terra, como uma extensão de terra. Um índice espacial em uma coluna de geografia mapeia os dados geográficos para um espaço bidimensional, não euclidiano.

Um índice espacial é definido em uma coluna de tabela que contém dados espaciais (uma coluna espacial). Cada índice espacial faz referência a um espaço finito. Por exemplo, um índice para uma coluna de geometry faz referência a uma área retangular especificada pelo usuário em um plano.

Decompondo espaço indexado em uma hierarquia de grade

No SQL Server 2008, índices espaciais são criados usando árvores B, o que significa que os índices devem representar os dados espaciais bidimensionais na ordem linear de árvores B. Portanto, antes de ler dados em um índice espacial, o SQL Server 2008 implementa uma decomposição uniforme hierárquica do espaço. O processo de criação de índice decompõe o espaço em uma hierarquia de gradede quatro níveis. Esses níveis são referidos como nível 1 (o nível superior), nível 2, nível 3e nível 4.

Cada nível sucessivo decompõe ainda mais o nível acima dele, de forma que cada célula de nível superior contém uma grade completa no próximo nível. Em um determinado nível, todas as grades têm o mesmo número de células ao longo dos dois eixos (por exemplo, 4x4 ou 8x8) e as células são todas de um único tamanho.

A ilustração a seguir mostra a decomposição da célula superior direita em cada nível da hierarquia de uma grade de 4x4. Na realidade, todas as células são decompostas dessa maneira. Assim, por exemplo, a decomposição de um espaço em quatro níveis de grades de 4x4 realmente produz um total de 65.536 células de quatro níveis.

Quatro níveis de mosaico recursivo

ObservaçãoObservação

A decomposição de espaço para um índice espacial depende da unidade de medida usada pelos dados do aplicativo.

As células de uma hierarquia de grade são numeradas de maneira linear usando uma variação da curva de preenchimento de espaço de Hilbert. No entanto, para fins ilustrativos, esta discussão usa uma numeração baseada em linhas, em vez da numeração realmente produzida pela curva de Hilbert. Na ilustração a seguir, vários polígonos que representam prédios e linhas que representam ruas já foram colocados em uma grade 4x4 de nível 1. As células de nível 1 são numeradas de 1 a 16, a partir da célula superior esquerda.

Polígonos e linhas colocados em uma grade de nível 1 4 x 4

Densidade da grade

O número de células ao longo dos eixos de uma grade determina sua densidade: quanto maior o número, mais densa a grade. Por exemplo, uma grade de 8x8 (que produz 64 células) é mais densa do que uma grade de 4x4 (que produz 16 células). A densidade da grade é definida em uma base por nível.

A instrução CREATE SPATIAL INDEXTransact-SQL oferece suporte a uma cláusula GRIDS que permite especificar diferentes densidades de grade em diferentes níveis. A densidade da grade em um determinado nível é especificada usando uma das seguintes palavras-chave:

Palavra-chave

Configuração da grade

Número de células

BAIXA

4X4

16

MÉDIA

8X8

64

ALTA

16X16

256

O padrão é MÉDIA em todos os níveis.

Você pode controlar o processo de decomposição especificando densidades não padrão de grade. Por exemplo, densidades diferentes de grade em diferentes níveis podem ser úteis para ajuste fino de um índice baseado no tamanho do espaço indexado e os objetos na coluna espacial.

ObservaçãoObservação

As densidades da grade de um índice espacial são visíveis nas colunas level_1_grid, level_2_grid, level_3_grid e level_4_grid da exibição do catálogo sys.spatial_index_tessellations.

Mosaico

Após a decomposição de um espaço indexado em uma hierarquia de grade, o índice espacial lê os dados da coluna espacial, linha a linha. Depois de ler os dados de um objeto espacial (ou instância), o índice espacial executa um processo de mosaico para aquele objeto. O processo de mosaico ajusta o objeto na hierarquia da grade associando o objeto a um conjunto de células da grade tocadas por ele (células tocadas). Iniciando no nível 1 da hierarquia de grade, o processo de mosaico continua com amplitude primeiro em todo o nível. Potencialmente, o processo pode continuar por todos os quatro níveis, um nível de cada vez.

A saída do processo de mosaico é um conjunto de células tocadas que são registradas no índice espacial do objeto. Consultando essas células registradas, o índice espacial pode localizar o objeto no espaço em relação a outros objetos na coluna espacial que também são armazenados no índice.

Regras do mosaico

Para limitar o número de células tocadas registradas para um objeto, o processo de mosaico aplica várias regras de mosaico. Essas regras determinam a profundidade do processo de mosaico e quais das células tocadas são registradas no índice espacial do objeto.

Essas regras são as seguintes:

  • A regra de cobertura

    Se o objeto cobrir uma célula completamente, a célula será considerada coberta pelo objeto. Uma célula coberta é contada e não é incluída no mosaico. Essa regra se aplica a todos os níveis da hierarquia de grade. A regra de cobertura simplifica o processo de mosaico e reduz a quantidade de dados que um índice espacial registra.

  • A regra de células por objeto

    Essa regra impõe o limite de células por objeto, que determina o número máximo de células que podem ser contadas para cada objeto, exceto no nível 1. Em níveis inferiores, a regra de células por objeto controla a quantidade de informações que podem ser registradas sobre o objeto.

  • A regra de célula mais profunda

    A regra de célula mais profunda gera a melhor aproximação de um objeto registrando apenas as células mais inferiores que foram incluídas no mosaico do objeto. Células pai não contribuem com a contagem de células por objeto e não são registradas no índice.

Estas regras de mosaico são aplicadas recursivamente em cada nível de grade. O restante desta seção descreve as regras de mosaico em mais detalhes.

Regra de cobertura

Se o objeto cobrir uma célula completamente, a célula será considerada coberta pelo objeto. Por exemplo, na ilustração a seguir, uma das células de segundo nível, 15.11, está completamente coberta pela parte do meio de um octógono.

Otimização da cobertura

Uma célula coberta é contada e registrada no índice e não é mais incluída no mosaico.

Regra de células por objeto

A extensão do mosaico de cada objeto depende principalmente do limite células por objeto do índice espacial. Esse limite define o número máximo de células que o mosaico pode contar por objeto. No entanto, observe que a regra de células por objeto não é imposta para o nível 1, portanto esse limite pode ser excedido. Se a contagem de nível 1 atingir ou exceder o limite de células por objeto, nenhum mosaico adicional ocorrerá nos níveis inferiores.

Desde que a contagem seja menor do que o limite de células por objeto, o processo de mosaico continua. Começando com a célula tocada de número inferior (por exemplo, a célula 15.6 na ilustração anterior), o processo testa cada célula para avaliar se deve contá-la ou incluí-la no mosaico. Se a inclusão de uma célula no mosaico exceder o limite de células por objeto, a célula será contada e não será incluída no mosaico. Caso contrário, a célula será incluída no mosaico e as células de nível inferior que são tocadas pelo objeto serão contadas. O processo de mosaico continua dessa maneira, em modo de amplitude, em todo o nível. Esse processo é repetido recursivamente para as grades de nível inferior das células incluídas no mosaico até que o limite seja atingido ou não existam mais células para contar.

Por exemplo, considere a ilustração anterior que mostra um octógono que se ajusta completamente à célula 15 da grade de nível 1. Na figura, a célula 15 foi incluída no mosaico, dissecando o octógono em nove células de nível 2. Esta ilustração pressupõe que o limite de células por objeto é 9 ou maior. No entanto, se o limite de células por objeto fosse 8 ou menor, a célula 15 não seria incluída no mosaico e a apenas a célula 15 seria contada para o objeto.

Por padrão, o limite de células por objeto é de 16, o que fornece uma troca satisfatória entre espaço e precisão para a maior parte dos índices espaciais. No entanto a instrução CREATE SPATIAL INDEXTransact-SQL oferece suporte a uma cláusula CELLS_PER_OBJECT**=**n que permite especificar um limite de células por objeto entre 1 e 8192, inclusive.

ObservaçãoObservação

A configuração de cells_per_object de um índice espacial é visível na exibição do catálogo sys.spatial_index_tessellations.

Regra de célula mais profunda

A regra de célula mais profunda explora o fato de que cada célula de nível inferior pertence à célula acima dela: uma célula de nível 4 pertence a uma célula de nível 3, uma célula de nível 3 pertence a uma célula de nível 2 e uma célula de nível 2 pertence a uma célula de nível 1. Por exemplo, um objeto que pertence à célula 1.1.1.1 também pertence às células 1.1.1, 1.1 e 1. O conhecimento dessas relações de hierarquia de células é criado no processador de consulta. Portanto apenas as células de nível mais profundo precisam ser registradas no índice minimizando as informações que o índice precisa armazenar.

Na ilustração seguinte, um polígono em forma de diamante relativamente pequeno é incluído no mosaico. O índice usa o limite de células por objeto padrão de 16 que não é atingido para esse objeto pequeno. Portanto o mosaico continua para baixo até o nível 4. O polígono reside nas seguintes células de nível 1 até nível 3: 4, 4.4 e 4.4.10 e 4.4.14. 4.4.10.13-15 e 4.4.14.1-3, 4.4.14.5-7 e 4.4.14.9-11.

Otimização de célula mais profunda

Esquemas de mosaico

O comportamento de um índice espacial depende parcialmente de seu esquema de mosaico. O esquema de mosaico é específico ao tipo de dados. No SQL Server 2008, índices espaciais oferecem suporte a dois esquemas de mosaico:

  • O mosaico de grade geométrica, que é o esquema do tipo de dados geometry.

  • Mosaico de grade geográficaque se aplica a colunas do tipo de dados de geografia.

ObservaçãoObservação

A configuração de tessellation_scheme de um índice espacial é visível na exibição do catálogo sys.spatial_index_tessellations.

Esquema de mosaico de grade geométrica

O esquema de mosaico de grade geométrica é o esquema de mosaico padrão para o tipo de dados de geometry e, no SQL Server 2008, ele é o único esquema de mosaico desse tipo. Esta seção discute aspectos do mosaico de grade geométrica que são relevantes para trabalhar com índices espaciais: métodos suportados e caixas delimitadoras.

ObservaçãoObservação

É possível especificar explicitamente esse esquema de mosaico usando a cláusula USING GEOMETRY_GRID da instrução CREATE SPATIAL INDEXTransact-SQL.

Métodos de geometria suportados

Um índice espacial tem o objetivo de reduzir o custo da aplicação de métodos orientados a conjuntos para uma coluna espacial atuando como um filtro nos objetos. O tipo de dados de geometry fornece métodos internos para construção de instâncias de geometria que descrevem objetos geométricos e para trabalhar com essas instâncias. Em determinadas condições, índices espaciais oferecem suporte a vários métodos de geometria orientados a conjunto, como STIntersects() e STTouches().

Para obter mais informações sobre o suporte fornecido por índices espaciais para métodos de geometria, consulte Métodos de geometria com suporte de índices espaciais.

A caixa delimitadora

Dados geométricos ocupam um plano que pode ser infinito. Porém, no SQL Server 2008, um índice espacial requer um espaço finito. Para estabelecer um espaço finito para decomposição, o esquema de mosaico de grade geométrica requer uma caixa delimitadora retangular. A caixa delimitadora é definida por quatro coordenadas, (x-min,y-min) e (x-max,y-max) que são armazenadas como propriedades do índice espacial. Essas coordenadas representam o seguinte:

  • x-min é a coordenada x do canto inferior esquerdo da caixa delimitadora.

  • y-min é a coordenada y do canto inferior esquerdo.

  • x-max é a coordenada x do canto superior direito.

  • y-max é a coordenada y do canto superior direito.

ObservaçãoObservação

Essas coordenadas são especificadas pela cláusula BOUNDING_BOX da instrução CREATE SPATIAL INDEXTransact-SQL.

As coordenadas **(x-min)**y-mine **(x-max)**y-maxdeterminam o posicionamento e as dimensões da caixa delimitadora. O espaço fora da caixa delimitadora é tratado como uma única célula numerada como 0.

O índice espacial decompõe o espaço dentro da caixa delimitadora. A grade de nível 1 da hierarquia de grade preenche a caixa delimitadora. Para colocar um objeto geométrico na hierarquia da grade, o índice espacial compara as coordenadas do objeto com as coordenadas da caixa delimitadora.

A ilustração a seguir mostra os pontos definidos pelas coordenadas (x-min,y-min) e (x-max,y-max) da caixa delimitadora. O nível superior da hierarquia da grade é mostrado como uma grade de 4x4. Para fins ilustrativos, os níveis inferiores são omitidos. O espaço fora da caixa delimitadora é indicado por um zero (0). Observe que o objeto 'A' se estende parcialmente além da caixa e o objeto 'B' está completamente fora da caixa na célula 0.

Caixa delimitadoras mostrando coordenadas e a célula 0.

Uma caixa delimitadora corresponde a uma parte dos dados espaciais de um aplicativo. Se a caixa delimitadora do índice contém completamente os dados armazenados na coluna espacial ou apenas uma parte é responsabilidade do aplicativo. Apenas operações computadas em objetos que estão completamente dentro da caixa delimitadora se beneficiam do índice espacial. Portanto, para obter o máximo benefício de um índice espacial em uma coluna de geometry, é necessário especificar uma caixa delimitadora que contenha todos ou a maior parte dos objetos.

ObservaçãoObservação

As densidades da grade de um índice espacial são visíveis nas colunas bounding_box_xmin, bounding_box_ymin, bounding_box_xmax e bounding_box_ymax da exibição do catálogo sys.spatial_index_tessellations.

Esquema de mosaico de grade geográfica

Este esquema de mosaico aplica-se apenas a uma coluna de geography. Esta seção resume os métodos que têm suporte do mosaico de grade geográfica e discute como o espaço geodésico é projetado em um plano que, em seguida, é decomposto em uma hierarquia de grade.

ObservaçãoObservação

É possível especificar explicitamente esse esquema de mosaico usando a cláusula USING GEOGRAPHY_GRID da instrução CREATE SPATIAL INDEXTransact-SQL.

Métodos de geografia com suporte

O tipo de dados geography tem métodos internos para construir e manipular geographyinstâncias que descrevem objetos geométricos. Em determinadas condições, índices espaciais oferecem suporte aos seguintes métodos de geografia orientados a conjunto: STIntersects(),STEquals() e STDistance(). Um índice espacial em uma coluna de tipo de dados geography filtra os objetos e reduz o custo de desempenho e de consulta relacionado à aplicação desses métodos aos dados espaciais.

Para obter mais informações sobre o suporte fornecido por índices espaciais para métodos de geografia, consulte Métodos de geografia com suporte de índices espaciais.

Projeção do espaço geodésico em um plano

Computações em instâncias (objetos) de geography tratam o espaço que contém os objetos como um elipsóide geodésico. Para decompor esse espaço, o esquema de mosaico de grade geográfica divide a superfície do elipsóide em seus hemisférios superior e inferior e executa as seguintes etapas:

  1. Projeta cada hemisfério sobre as facetas de uma pirâmide quadrilátera.

  2. Achata as duas pirâmides.

  3. Une as pirâmides achatadas para formar um plano não euclidiano.

A ilustração a seguir mostra uma exibição esquemática do processo de decomposição de três etapas. Nas pirâmides, as linhas pontilhadas representam os limites das quatro facetas de cada pirâmide. As etapas 1 e 2 ilustram o elipsóide geodésico usando uma linha horizontal verde para representar a longitude equatorial e uma série de linhas verticais verdes para representar várias linhas longitudinais. A etapa 1 mostra as pirâmides sendo projetadas sobre os dois hemisférios. A etapa 2 mostra as pirâmides sendo achatadas. A etapa 3 ilustra as pirâmides achatadas após terem sido combinadas para formar um plano mostrando várias linhas longitudinais projetadas. Observe que essas linhas projetadas se tornam retas e variam em comprimento, dependendo de sua localização nas pirâmides.

Projeção do elipsoide em um plano

Depois do espaço ser projetado no plano, o plano é decomposto na hierarquia de grade de quatro níveis. Níveis diferentes podem usar diferentes densidades de grade. A ilustração a seguir mostra o plano depois de decomposto em uma grade 4x4 de nível 1. Para fins ilustrativos, os níveis inferiores da hierarquia da grade são omitidos. Na realidade, o plano é decomposto completamente em uma hierarquia de grade de quatro níveis. Após o término do processo de decomposição, os dados geográficos são lidos, linha por linha, na coluna de geografia, e o processo de mosaico é executado em cada objeto.

Grade de geografia de nível 1

Suporte a índice espacial

Um índice espacial pode ser criado apenas em uma coluna espacial. É possível criar índices espaciais em qualquer coluna espacial em uma tabela que ofereça suporte a índices espaciais e criar vários índices espaciais em uma determinada coluna espacial. Para obter mais informações sobre restrições de índices espaciais, consulte Restrições em índices espaciais.