Общие сведения о пространственных индексахSpatial Indexes Overview

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed InstanceПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance

SQL ServerSQL Server поддерживает пространственные данные и пространственные индексы.supports spatial data and spatial indexes. Пространственный индекс представляет собой тип расширенного индекса, позволяющий индексировать пространственные столбцы.A spatial index is a type of extended index that allows you to index a spatial column. Пространственный столбец представляет собой столбец таблицы, в котором содержатся данные пространственного типа, например geometry или geography.A spatial column is a table column that contains data of a spatial data type, such as geometry or geography.

Важно!

Подробное описание и примеры использования функций обработки пространственных данных, появившихся в SQL Server 2012 (11.x)SQL Server 2012 (11.x), включая функции, работающие с пространственными индексами, можно получить, скачав технический документ Новые функции обработки пространственных данных в SQL Server 2012.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.

О пространственных индексахAbout Spatial Indexes

Декомпозиция индексированного пространства в сеточную иерархиюDecomposing Indexed Space into a Grid Hierarchy

В SQL ServerSQL Serverпространственные индексы строятся с помощью сбалансированных деревьев, что означает, что индексы должны представлять двумерные пространственные данные в линейном порядке сбалансированных деревьев.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. Поэтому перед считыванием данных в пространственный индекс SQL ServerSQL Server проводит иерархическую декомпозицию пространства.Therefore, before reading data into a spatial index, SQL ServerSQL Server implements a hierarchical uniform decomposition of space. В процессе создания индекса происходит декомпозиция пространства в четырехуровневую сеточную иерархию.The index-creation process decomposes the space into a four-level grid hierarchy. Эти уровни называют Уровень 1 (верхний), Уровень 2, Уровень 3 и Уровень 4.These levels are referred to as level 1 (the top level), level 2, level 3, and level 4.

Каждый последующий уровень содержит дальнейшую декомпозицию уровня выше, так что каждая ячейка уровня выше содержит полную сетку следующего уровня.Each successive level further decomposes the level above it, so each upper-level cell contains a complete grid at the next level. На заданном уровне все сетки имеют одинаковое число ячеек на обеих осях (например, 4x4 или 8x8), и все ячейки имеют одинаковый размер.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.

На следующем рисунке показана декомпозиция верхней правой ячейки на каждом уровне сеточной иерархии в сетку 4x4.The following illustration shows the decomposition for the upper-right cell at each level of the grid hierarchy into a 4x4 grid. Фактически, таким образом декомпозиция выполняется для всех ячеек.In reality, all the cells are decomposed in this way. Например, декомпозиция пространства в четыре уровня сеток 4x4 фактически приводит к созданию 65 536 ячеек четвертого уровня.Thus, for example, decomposing a space into four levels of 4x4 grids actually produces a total of 65,536 level-four cells.

Четыре уровня рекурсивной тесселяцииFour-levels of recursive tessellation

Примечание

Декомпозиция пространства в пространственный индекс не зависит от единиц измерения в данных приложения.The decomposition of space for a spatial index is independent of the unit of measurement that the application data uses.

Ячейки в сеточной иерархии нумеруются в линейном порядке с использованием варианта заполнения пространства кривой Гильберта.Grid hierarchy cells are numbered in a linear fashion by using a variation of the Hilbert space-filling curve. Однако на данном рисунке используется простая построковая нумерация вместо нумерации, которая фактически создается кривой Гильберта.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. На следующем рисунке несколько многоугольников, представляющих здания, и линий, представляющих улицы, помещены в сетку 4x4 уровня 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. Ячейки первого уровня нумеруются от 1 до 16, начиная с верхней левой.The level-1 cells are numbered from 1 through 16, starting with the upper-left cell.

Полигоны и линии, помещены в сетку 4x4 уровня 1Polygons and lines placed into a 4x4 level-1 grid

Плотность сеткиGrid Density

Число ячеек по осям сетки определяет ее плотность: чем больше число, тем плотнее сетка.The number of cells along the axes of a grid determines its density: the larger the number, the denser the grid. Например, сетка 8x8 (которая порождает 64 ячейки) плотнее сетки 4x4 (которая порождает 16 ячеек).For example, an 8x8 grid (which produces 64 cells), is denser than a 4x4 grid (which produces 16 cells). Плотность сетки определяется по уровням.Grid density is defined on a per-level basis.

Инструкция CREATE SPATIAL INDEXTransact-SQLTransact-SQL поддерживает использование предложения GRIDS, которое позволяет указывать различные плотности сетки на разных уровнях.The CREATE SPATIAL INDEXTransact-SQLTransact-SQL statement supports a GRIDS clause that enables you to specify different grid densities at different levels. Плотность сетки для данного уровня задается с помощью одного из следующих ключевых слов.The grid density for a given level is specified by using one of the following keywords.

Ключевое словоKeyword Конфигурация сеткиGrid configuration Число ячеекNumber of cells
LOWLOW 4X44X4 1616
MEDIUMMEDIUM 8X88X8 6464
HIGH.HIGH 16X1616X16 256256

В SQL ServerSQL Server, если уровень совместимости базы данных имеет значение 100 или ниже, по умолчанию используется значение MEDIUM на всех уровнях.In SQL ServerSQL Server, when the database compatibility level is set to 100 or lower, then the default is MEDIUM on all levels. Если уровень совместимости базы данных имеет значение 110 или выше, то по умолчанию используется автоматическая схема сетки.When the database compatibility level is set to 110 or higher, then the default is an auto grid scheme. (Автоматическая сетка указывает 8 уровень конфигурации HLLLLLLL.) Вместо изменения плотности сетки индекса можно изменять число ячеек на объект и число ячеек окна запроса на объект посредством указания.(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.

Управление процессом декомпозиции производится заданием плотности сетки, отличной от значения по умолчанию.You can control the decomposition process by specifying non-default grid densities. Например, может оказаться полезным использование разных плотностей сеток на разных уровнях для точной настройки индекса, исходя из размера индексируемого пространства и объектов в пространственном столбце.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.

Примечание

Значения плотности сеток в пространственном индексе можно просмотреть в столбцах level_1_grid, level_2_grid, level_3_grid и level_4_grid представления каталога sys.spatial_index_tessellations , если уровень совместимости базы данных имеет значение 100 или ниже.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. Параметры схемы тесселяции GEOMETRY_AUTO_GRID/GEOGRAPHY_AUTO_GRID не заполняют эти столбцы.The GEOMETRY_AUTO_GRID/GEOGRAPHY_AUTO_GRID tessellation scheme options do not populate these columns. Представление каталога sys.spatial_index_tessellations содержит значения NULL в этих столбцах, если используются параметры автосетки.sys.spatial_index_tessellations catalog view has NULL values for these columns when the auto grid options are used.

ТесселяцияTessellation

После декомпозиции индексированного пространства в сеточную иерархию пространственный индекс построчно считывает данные из пространственного столбца.After decomposition of an indexed space into a grid hierarchy, the spatial index reads the data from the spatial column, row by row. После считывания данных для пространственного объекта (или экземпляра) пространственный индекс выполняет процесс тесселяции для этого объекта.After reading the data for a spatial object (or instance), the spatial index performs a tessellation process for that object. Процесс тесселяции помещает объект в cеточную иерархию, устанавливая связь между объектом и набором сеточных ячеек, с которыми он соприкасается (контактные ячейки).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). Начиная с уровня 1 сеточной иерархии, процесс тесселяции сначала обрабатывает уровень в ширину .Starting at level 1 of the grid hierarchy, the tessellation process proceeds breadth first across the level. В принципе процесс может продолжиться для всех четырех уровней, по одному уровню за раз.Potentially, the process can continue through all four levels, one level at a time.

Результатом процесса тесселяции является набор контактных ячеек, которые записываются в пространственный индекс объекта.The output of the tessellation process is a set of touched cells that are recorded in the spatial index for the object. Ссылаясь на эти записанные ячейки, пространственный индекс может найти объект в пространстве по его расположению относительно других объектов в пространственном столбце, которые также хранятся в индексе.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.

Правила тесселяцииTessellation Rules

Чтобы ограничить число контактных ячеек, записываемых для объекта, при проведении тесселяции применяется ряд правил тесселяции.To limit the number of touched cells that are recorded for an object, the tessellation process applies several tessellation rules. Эти правила определяют глубину процесса тесселяции и контактные ячейки, которые записываются в индекс.These rules determine the depth of the tessellation process and which of the touched cells are recorded in the index.

Ниже приведены эти правила.These rules are as follows:

  • Правило покрытияThe covering rule

    Если объект полностью покрывает ячейку, говорят, что эта ячейка накрыта объектом.If the object completely covers a cell, that cell is said to be covered by the object. Накрытая ячейка считается и не подвергается тесселяции.A covered cell is counted and is not tessellated. Это правило применяется на всех уровнях сеточной иерархии.This rule applies at all levels of the grid hierarchy. Это правило упрощает процесс тесселяции и сокращает объем данных, записываемых в пространственный индекс.The covering rule simplifies the tessellation process and reduces the amount of data that a spatial index records.

  • Правило ячеек на объектThe cells-per-object rule

    Это правило проверяет ограничение ячеек на объект, определяющее максимальное число ячеек, которые могут быть подсчитаны для каждого объекта, за исключением первого уровня.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. На более низких уровнях правило ячеек на объект определяет объем данных, которые могут быть записаны об объекте.At lower levels, the cells-per-object rule controls the amount of information that can be recorded about the object.

  • Правило самой глубокой ячейкиThe deepest-cell rule

    Правило самой глубокой ячейки создает наилучшее приближение для объекта, записывая только самые нижние ячейки, созданные при тесселяции объекта.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. Родительские ячейки не включаются в счетчик ячеек на объект и не записываются в индекс.Parent cells do not contribute to the cells-per-object count, and they are not recorded in the index.

Эти правила тесселяции применяются рекурсивно на каждом уровне сетки.These tessellation rules are applied recursively on each grid level. В оставшейся части этого раздела правила тесселяции описываются более подробно.The rest of this section describes the tessellation rules in more detail.

Правило покрытияCovering Rule

Если объект полностью покрывает ячейку, говорят, что эта ячейка накрыта объектом.If an object completely covers a cell, that cell is said to be covered by the object. Например, на следующем рисунке одна из ячеек второго уровня (15.11) полностью накрыта средней частью восьмиугольника.For example, in the following illustration, one of the second-level cells, 15.11, is completely covered by the middle portion of an octagon.

Оптимизация покрытияCovering optimization

Накрытая ячейка считается и записывается в индекс, и дальнейшая тесселяция для ячейки не проводится.A covered cell is counted and recorded in the index, and the cell is not tessellated any further.

Правило ячеек на объектCells-Per-Object Rule

Экстент тесселяции для каждого объекта в основном зависит от ограничения ячеек на объект в пространственном индексе.The extent of tessellation of each object depends primarily on the cells-per-object limit of the spatial index. Это ограничение определяет максимальное число ячеек, которые могут считаться в процессе тесселяции объекта.This limit defines the maximum number of cells that tessellation can count per object. Однако имейте в виду, что правило ячеек на объект не действует для уровня 1, поэтому данное ограничение может быть превышено.Note, however, that the cells-per-object rule is not enforced for level 1, so it is possible to exceed this limit. Если счет на уровне 1 достигает или превышает ограничение ячеек на объект, на нижних уровнях дальнейшая тесселяция не проводится.If the level-1 count reaches, or exceeds, the cells-per-object limit, no further tessellation occurs at the lower levels.

Пока счет меньше ограничения ячеек на объект, процесс тесселяции продолжается.As long as the count is less than the cells-per-object limit, the tessellation process continues. Начиная с контактной ячейки с минимальным номером (например, ячейка 15.6 на предыдущем рисунке), процесс проверяет каждую ячейку и принимает решение, считать ее или проводить тесселяцию.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. Если при тесселяции ячейки будет превышено ограничение ячеек на объект, то ячейка будет посчитана, но тесселяция для нее проведена не будет.If tessellating a cell would exceed the cells-per-object limit, the cell is counted and not tessellated. В противном случае проводится тесселяция ячейки, а ячейки нижнего уровня, соприкасающиеся с объектом, считаются.Otherwise, the cell is tessellated, and the lower-level cells that are touched by the object are counted. Процесс тесселяции продолжается, таким образом, в ширину по всему уровню.The tessellation process continues in this way, breadth-wise, across the level. Этот процесс повторяется рекурсивно для сеток нижнего уровня тесселированных ячеек, пока не будет достигнуто ограничение или все ячейки не будут подсчитаны.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.

Например, рассмотрим предыдущий рисунок, где восьмиугольник полностью помещается в ячейку 15 сетки уровня 1.For example, consider the preceding illustration, which shows an octagon that fits completely into cell 15 of the level-1 grid. На этом рисунке для ячейки 15 была проведена тесселяция, которая разбила восьмиугольник на девять ячеек уровня 2.In the figure, cell 15 has been tessellated, dissecting the octagon into nine level-2 cells. На рисунке предполагается, что ограничение ячеек на объект равно 9 или больше.This illustration assumes that the cells-per-object limit is 9 or more. Однако, если бы ограничение ячеек на объект равнялось 8 или меньше, то для ячейки 15 тесселяция бы не проводилась и для объекта считалась бы только ячейка 15.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.

По умолчанию ограничение ячеек на объект равно 16, что обеспечивает разумный компромисс между охватом и точностью для большинства пространственных индексов.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. Однако инструкция CREATE SPATIAL INDEXTransact-SQLTransact-SQL поддерживает предложение CELLS_PER_OBJECT = n, которое позволяет ограничить количество ячеек на объект (от 1 до 8192 включительно).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.

Примечание

Параметр cells_per_object пространственного индекса можно найти в представлении каталога sys.spatial_index_tessellations .The cells_per_object setting of a spatial index is visible in the sys.spatial_index_tessellations catalog view.

Правило самой глубокой ячейкиDeepest-Cell Rule

Правило самой глубокой ячейки учитывает тот факт, что каждая ячейка нижнего уровня принадлежит ячейке над ней. Ячейка уровня 4 принадлежит ячейке уровня 3, ячейка уровня 3 принадлежит ячейке уровня 2, а ячейка уровня 2 принадлежит ячейке уровня 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. Например, объект, который относится к ячейке 1.1.1.1, также принадлежит ячейке 1.1.1, ячейке 1.1 и ячейке 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. Сведения о таких иерархических связях ячеек встроены в обработчик запросов.Knowledge of such cell-hierarchy relationships is built into the query processor. Поэтому в индекс необходимо записывать только ячейки самого нижнего уровня, минимизируя объем данных, хранящихся в индексе.Therefore, only the deepest-level cells need to be recorded in the index, minimizing the information that the index needs to store.

На следующем рисунке проводится тесселяция относительно небольшого ромбовидного многоугольника.In the following illustration, a relatively small diamond-shaped polygon is tessellated. В индексе используется ограничение ячеек на объект, по умолчанию равное 16, которое для этого небольшого объекта не достигается.The index uses the default cells-per-object limit of 16, which is not reached for this small object. Таким образом, тесселяция продолжается до уровня 4.Therefore, tessellation continues down to level 4. Многоугольник располагается в следующих ячейках на уровнях с 1 по 3: 4, 4.4, 4.4.10 и 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. Однако, согласно правилу самой глубокой ячейки, тесселяция учитывает только двенадцать ячеек на уровне 4: 4.4.10.13-15 и 4.4.14.1-3, 4.4.14.5-7 и 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.

Оптимизация по правилу самой глубокой ячейкиDeepest-cell optimization

Схемы тесселяцииTessellation Schemes

Поведение пространственного индекса частично зависит от используемой схемы тесселяции.The behavior of a spatial index depends partly on its tessellation scheme. Схема тесселяции зависит от типа данных.The tessellation scheme is data-type specific. В SQL ServerSQL Serverпространственные индексы поддерживают две схемы тесселяции.In SQL ServerSQL Server, spatial indexes support two tessellation schemes:

  • Тесселяция геометрической сетки— эта схема предназначена для типа данных geometry ).Geometry grid tessellation, which is the scheme for the geometry data type.

  • Тесселяция сетки географических объектов, которая применяется к столбцам типа данных geography .Geography grid tessellation, which applies to columns of the geography data type.

Примечание

Параметр tessellation_scheme пространственного индекса можно найти в представлении каталога sys.spatial_index_tessellations .The tessellation_scheme setting of a spatial index is visible in the sys.spatial_index_tessellations catalog view.

Схема тесселяции сетки геометрических объектовGeometry Grid Tessellation Scheme

Тесселяция GEOMETRY_AUTO_GRID используется по умолчанию для типа данных geometry в SQL Server 2012 (11.x)SQL Server 2012 (11.x) и более поздних версиях.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. Схема тесселяции GEOMETRY_GRID является единственной доступной для геометрических типов данных в SQL Server 2008SQL Server 2008.GEOMETRY_GRID tessellation is the only tessellation scheme available for geometry data types in SQL Server 2008SQL Server 2008. В этом разделе рассматриваются аспекты тесселяции сетки геометрических объектов, релевантные для пространственных индексов: поддерживаемые методы и ограничивающие прямоугольники.This section discusses aspects of geometry grid tessellation that are relevant to working with spatial indexes: supported methods and bounding boxes.

Примечание

Эту схему тесселяции можно задать явным образом с помощью предложения USING (GEOMETRY_AUTO_GRID/GEOMETRY_GRID) инструкции 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.

Ограничивающий прямоугольникThe Bounding Box

Геометрические данные занимают плоскость, которая может быть бесконечной.Geometric data occupies a plane that can be infinite. Однако в SQL ServerSQL Serverдля пространственного индекса требуется конечное пространство.In SQL ServerSQL Server, however, a spatial index requires a finite space. Для определения конечного пространства для декомпозиции схеме тесселяции сетки геометрических объектов требуется ограничивающий прямоугольник.To establish a finite space for decomposition, the geometry grid tessellation scheme requires a rectangular bounding box. Ограничивающий прямоугольник определяется четырьмя координатами (x-min,y-min) и (x-max,y-max), которые хранятся в виде свойств пространственного индекса.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. Эти координаты представляют следующее.These coordinates represent the following:

  • x-min — это координата левого нижнего угла ограничивающего прямоугольника по оси X.x-min is the x-coordinate of the lower-left corner of the bounding box.

  • y-min — это координата левого нижнего угла по оси Y.y-min is the y-coordinate of the lower-left corner.

  • x-max — это координата верхнего правого угла по оси X.x-max is the x-coordinate of the upper-right corner.

  • y-max — это координата верхнего правого угла по оси Y.y-max is the y-coordinate of upper-right corner.

Примечание

Эти координаты задаются предложением BOUNDING_BOX в инструкции CREATE SPATIAL INDEXTransact-SQLTransact-SQL .These coordinates are specified by the BOUNDING_BOX clause of the CREATE SPATIAL INDEXTransact-SQLTransact-SQL statement.

Координаты (x-min,y-min) и (x-max,y-max) определяют расположение и размеры ограничивающего прямоугольника.The (x-min,y-min) and (x-max,y-max) coordinates determine the placement and dimensions of the bounding box. Пространство за пределами ограничивающего прямоугольника считается одной ячейкой с номером 0.The space outside of the bounding box is treated as a single cell that is numbered 0.

В пространственном индексе проводится декомпозиция пространства внутри ограничивающего прямоугольника.The spatial index decomposes the space inside the bounding box. Сетка уровня 1 сеточной иерархии заполняет ограничивающий прямоугольник.The level-1 grid of the grid hierarchy fills the bounding box. Чтобы поместить геометрический объект в сеточную иерархию, пространственный индекс сравнивает координаты объекта с координатами ограничивающего прямоугольника.To place a geometric object in the grid hierarchy, the spatial index compares the coordinates of the object to the bounding-box coordinates.

На приведенном ниже рисунке показаны точки, определенные координатами (x-min,y-min) и (x-max,y-max) ограничивающего прямоугольника.The following illustration shows the points defined by the (x-min,y-min) and (x-max,y-max) coordinates of the bounding box. Верхний уровень сеточной иерархии показан как решетка 4x4.The top-level of the grid hierarchy is shown as a 4x4 grid. На данном рисунке нижние уровни опущены.For the purpose of illustration, the lower levels are omitted. Пространство за пределами ограничивающего прямоугольника обозначается нулем (0).The space outside of the bounding box is indicated by a zero (0). Обратите внимание, что объект A частично выходит за пределы ограничивающего прямоугольника, а объект B находится полностью вне прямоугольника в ячейке 0.Note that object 'A' extends partly beyond the box, and object 'B' lies completely outside the box in cell 0.

Ограничивающий прямоугольник, показывающий координаты и ячейку 0.Bounding box showing coordinates and cell 0.

Ограничивающий прямоугольник относится к некоторой части пространственных данных приложения.A bounding box corresponds to some portion of an application's spatial data. Приложение само определяет, будет ли ограничивающий прямоугольник индекса полностью включать данные из пространственного столбца или только их часть.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. Пространственный индекс имеет смысл использовать только для операций с объектами, полностью находящимися внутри ограничивающего прямоугольника.Only operations computed on objects that are entirely inside of the bounding box benefit from the spatial index. Поэтому для максимально эффективного использования пространственного индекса по столбцу geometry необходимо указать ограничивающий прямоугольник, содержащий все объекты или большинство из них.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.

Примечание

Плотности сеток в пространственном индексе можно просмотреть в столбцах bounding_box_xmin, bounding_box_ymin, bounding_box_xmax и bounding_box_ymax представления каталога 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.

Схема тесселяции сетки географических объектовThe Geography Grid Tessellation Scheme

Эта схема тесселяции применяется только к столбцу geography .This tessellation scheme applies only to a geography column. В этом разделе рассматриваются методы, поддерживаемые тесселяцией географических объектов, и описывается, как геодезическое пространство проецируется на плоскость, которая затем подвергается декомпозиции в сеточную иерархию.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.

Примечание

Эту схему тесселяции можно задать явным образом с помощью предложения USING (GEOGRAPHY_AUTO_GRID/GEOGRAPHY_GRID) в инструкции CREATE SPATIAL INDEXTransact-SQLTransact-SQL .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.

Проекция геодезического пространства на плоскостьProjection of the Geodetic Space onto a Plane

При вычислениях с экземплярами geography (объектами) пространство, содержащее объекты, считается геодезическим эллипсоидом.Computations on geography instances (objects) treat the space containing the objects as a geodetic ellipsoid. Для декомпозиции этого пространства схема тесселяции сетки географических объектов разделяет эллипсоид на верхнюю и нижнюю полушария, а затем выполняет следующие шаги.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. Проецирует каждое полушарие на грани четырехсторонней пирамиды.Projects each hemisphere onto the facets of a quadrilateral pyramid.

  2. Делает обе пирамиды плоскими.Flattens the two pyramids.

  3. Соединяет плоские пирамиды для создания неевклидовой плоскости.Joins the flattened pyramids to form a non-Euclidean plane.

На следующем рисунке показано схематическое представление трехэтапного процесса декомпозиции.The following illustration shows a schematic view of the three-step decomposition process. В пирамидах пунктирные линии представляют границы четырех граней каждой пирамиды.In the pyramids, the dotted lines represent the boundaries of the four facets of each pyramid. На шагах 1 и 2 показан геодезический эллипсоид: зеленая горизонтальная линия представляет экваториальную широту, а ряд зеленых вертикальных линий представляют несколько долгот.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. На шаге 1 показано проецирование двух полушарий на пирамиды.Step 1 shows the pyramids being projected over the two hemispheres. На шаге 2 показано уплощение пирамид.Step 2 shows the pyramids being flattened. На шаге 3 показаны плоские пирамиды после их объединения в плоскость и число спроецированных линий долготы.Step 3 illustrates the flattened pyramids, after they have been combined to form a plane, showing a number of projected longitude lines. Обратите внимание, что эти спроецированные линии выпрямлены и различаются по длине в зависимости от места проецирования на пирамиду.Notice that these projected lines are straightened and vary in length, depending on where they fall on the pyramids.

Проекция эллипсоида на плоскостьProjection of the ellipsoid onto a plane

После проецирования пространства на плоскость проводится ее декомпозиция в четырехуровневую сеточную иерархию.Once the space has been projected onto the plane, the plane is decomposed into the four-level grid hierarchy. На разных уровнях могут использоваться разные плотности сетки.Different levels can use different grid densities. На следующем рисунке показана плоскость после ее декомпозиции в сетку 4x4 уровня 1.The following illustration shows the plane after it has been decomposed into a 4x4 level-1 grid. На данном рисунке нижние уровни сеточной иерархии опущены.For the purposes of illustration, the lower-levels of the grid hierarchy are omitted. На самом деле плоскость подвергается полной декомпозиции в четырехуровневую сеточную иерархию.In actuality, the plane is fully decomposed into a four-level grid hierarchy. После окончания декомпозиции географические данные из столбца geography считываются по строкам, и для каждого объекта выполняется процедура тесселяции.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.

Географическая сетка уровня 1Level-1 geography grid

Поддерживаемые методы для пространственных индексовMethods Supported by Spatial Indexes

Геометрические методы, поддерживаемые пространственными индексамиGeometry Methods Supported by Spatial Indexes

При определенных условиях пространственные индексы поддерживают следующие геометрические методы на основе наборов: STContains(), STDistance(), STEquals(), STIntersects(), STOverlaps(), STTouches() и STWithin().Spatial indexes support the following set-oriented geometry methods under certain conditions: STContains(), STDistance(), STEquals(), STIntersects(), STOverlaps(), STTouches(), and STWithin(). Чтобы пространственный индекс поддерживал эти методы, в запросе их необходимо использовать в пределах предложения WHERE или JOIN ON, включив в состав предиката следующего общего вида: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.имя_метода(geometry2)оператор_сравнения**допустимое_числоgeometry1.method_name(geometry2)comparison_operator**valid_number

Чтобы получить ненулевой результат, аргументы geometry1 и geometry2 должны иметь одинаковый идентификатор пространственной ссылки (SRID).To return a non-null result, geometry1 and geometry2 must have the same spatial reference identifier (SRID). В противном случае метод возвращает значение NULL.Otherwise, the method returns NULL.

Пространственные индексы поддерживают предикаты следующих форм:Spatial indexes support the following predicate forms:

Географические методы, поддерживаемые пространственными индексамиGeography Methods Supported by Spatial Indexes

При определенных условиях пространственные индексы поддерживают следующие географические методы для работы с наборами: STIntersects(),STEquals(), and STDistance().Under certain conditions, spatial indexes support the following set-oriented geography methods: STIntersects(),STEquals(), and STDistance(). Чтобы пространственный индекс поддерживал эти методы, их необходимо использовать в предложении WHERE запроса, включив в состав предиката следующего общего вида: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.имя_метода(geography2)оператор_сравнения**допустимое_числоgeography1.method_name(geography2)comparison_operator**valid_number

Чтобы получить ненулевой результат, аргументы geography1 и geography2 должны иметь одинаковый идентификатор пространственной ссылки (SRID).To return a non-null result, geography1 and geography2 must have the same Spatial Reference Identifier (SRID). В противном случае метод возвращает значение NULL.Otherwise, the method returns NULL.

Пространственные индексы поддерживают предикаты следующих форм:Spatial indexes support the following predicate forms:

Запросы, использующие пространственные индексыQueries that use Spatial Indexes

Пространственные индексы поддерживаются только в запросах, в предложении WHERE которых есть индексированный пространственный оператор.Spatial indexes are only supported in queries that include an indexed spatial operator in the WHERE clause. Пример синтаксиса.For example syntax such as:

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

Оптимизатор запросов учитывает коммутативность пространственных операций (что @a.STIntersects(@b) = @b.STInterestcs(@a) ).The query optimizer understands the commutativity of spatial operations (that @a.STIntersects(@b) = @b.STInterestcs(@a) ). Однако пространственный индекс не будет использоваться, если в начале сравнения нет пространственного оператора (например, WHERE 1 = spatial op не будет использовать пространственный индекс).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). Для использования пространственного индекса перепишите сравнение (например, WHERE spatial op = 1).To use the spatial index, rewrite the comparison (for example WHERE spatial op = 1).

Как и при использовании любого другого индекса, если пространственный индекс поддерживается, то решение его использовать принимается, исходя из затрат, поэтому оптимизатор запросов может не принять решение об использовании, даже если для этого соблюдены все требования.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. Используйте инструкции showplan, чтобы определить, использовался ли пространственный индекс и нужно ли предоставлять указания для принудительного использования плана запроса.Use showplan to see if the spatial index was used and if necessary provide query hints to force a desired query plan.

Ближайший соседний тип запроса также поддерживает пространственные индексы, но только если используется определенный синтаксис запроса.The nearest neighbor type of query also supports spatial indexes however only if a specific query syntax is written. Правильный синтаксис: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) [;]  

См. такжеSee Also

Пространственные данные (SQL Server)Spatial Data (SQL Server)