SQL Server 2008 引入了对空间数据和空间索引的支持。“空间索引”是一种扩展索引,允许您对空间列编制索引。空间列是包含空间数据类型(如 geometry 或 geography)数据的表列。本节中的主题介绍了空间索引。
SQL Server 2008 及更高版本支持空间数据。这包括对平面空间数据类型 geometry 的支持,该数据类型支持欧几里得坐标系统中的几何数据(点、线和多边形)。geography 数据类型表示地球表面某区域上的地理对象,如一片陆地。geography 列的空间索引会将地理数据映射到二维非欧几里得空间。
空间索引是对包含空间数据的表列(“空间列”)定义的。每个空间索引指向一个有限空间。例如,geometry 列的索引指向平面上用户指定的矩形区域。
在 SQL Server 2008 中,空间索引使用 B 树构建而成,也就是说,这些索引必须按 B 树的线性顺序表示二维空间数据。因此,将数据读入空间索引之前,SQL Server 2008 先实现对空间的分层均匀分解。索引创建过程会将空间分解成一个四级“网格层次结构”。这些级别指的是“第 1 级”(顶级)、“第 2 级”、“第 3 级”和“第 4 级”。
每个后续级别都会进一步分解其上一级,因此上一级别的每个单元都包含下一级别的整个网格。在给定级别上,所有网格沿两个轴都有相同数目的单元(例如 4x4 或 8x8),并且单元的大小都相同。
下图显示了网格层次结构每个级别的右上角单元被分解成 4x4 网格的情况。事实上,所有单元都是以这种方式分解的。因此,以此为例,将一个空间分解成四个级别的 4x4 网格实际上会总共产生 65,536 个第四级单元。
针对空间索引进行的空间分解与应用程序数据使用的度量单位无关。
网格层次结构的单元是利用多种 Hilbert 空间填充曲线以线性方式编号的。然而,出于演示目的,这里使用的是简单的按行编号,而不是由 Hilbert 曲线实际产生的编号。在下图中,几个表示建筑物的多边形和表示街道的线已经放进了一个 4x4 的 1 级网格中。第 1 级单元的编号为 1 到 16,编号从左上角的单元开始。
沿网格轴的单元数目确定了网格的“密度”:单元数目越大,网格的密度越大。例如,8x8 网格(产生 64 个单元)的密度就大于 4x4 网格(产生 16 个单元)的密度。网格密度是以每个级别为基础定义的。
网格配置 单元数目
低 4X4 16
中 8X8 64
高 16X16 256
默认设置所有级别都为 中。
您可以通过指定非默认的网格密度控制分解过程。例如,在不同级别指定不同网格密度对于基于索引空间的大小和空间列中的对象来优化索引可能非常有用。
空间索引的网格密度显示在 sys.spatial_index_tessellations 目录视图的 level_1_grid、level_2_grid、level_3_grid 和 level_4_grid 列中。
将索引空间分解成网格层次结构后,空间索引将逐行读取空间列中的数据。读取空间对象(或实例)的数据后,空间索引将为该对象执行“分割过程”。分割过程通过将对象与其接触的网格单元集(“接触单元”)相关联使该对象适合网格层次结构。从网格层次结构的第 1 级开始,分割过程以“广度优先”方式对整个级别进行处理。在可能的情况下,此过程可以连续处理所有四个级别,一次处理一个级别。
分隔规则
分割过程的输出为对象的空间索引中所记录的接触单元集。通过引用这些已记录单元,空间索引可以确定该对象在空间中相对于空间列中也存储在索引中的其他对象的位置。
为了限制为对象记录的接触单元数,分割过程采用了几个分割规则。这些规则确定分割过程的深度以及在索引中记录哪些接触单元。
这些规则如下:
- 覆盖规则
如果一个对象完全盖住了某个单元,则称该单元由该对象所“覆盖”。被覆盖的单元会参与计数,但不进行分割。此规则应用于网格层次结构的所有级别。覆盖规则简化了分割过程,并减少了空间索引记录的数据量。
- 每对象单元数规则
此规则强制执行“每对象单元数限制”,这将确定可以为每个对象计数的最大单元数(第 1 级除外)。在较低级别,每对象单元数规则会控制可以记录的有关对象的信息量。
- 最深单元规则
最深单元规则通过只记录已为对象分割的最底部单元来生成该对象的最近似对象。父单元不计入每对象单元数,这些单元不记录在索引中。
这些分割规则依次逐步应用于每个网格级别。此部分的其余内容更详细地介绍了这些分割规则
覆盖规则
如果一个对象完全盖住了某个单元,则称该单元由该对象所“覆盖”。例如,在下图中,一个第 2 级单元 15.11 完全由八边形的中间部分所覆盖。
被覆盖的单元会参与计数并记录在索引中,但不再进行分割。
每对象单元数规则
每个对象的分割程度主要取决于空间索引的“每对象单元数限制”。此限制确定了对于每个对象分割可以计数的最大单元数。然而,请注意,每对象单元数规则不对第 1 级强制执行,因此可能超出此限制。如果第 1 级计数达到(或超出)每对象单元数限制,则在较低级别不再进行分割。
只要计数低于每对象单元数限制,分割过程就将继续。从编号最低的接触单元(例如上图中的单元 15.6)开始,此过程将测试每个单元以评估是对其进行计数还是进行分割。如果分割某单元将超出每对象单元数限制,将对该单元进行计数而不进行分割。否则,将对该单元进行分割,而对由对象接触的较低级别的单元进行计数。分割过程将以这种方式在整个级别的广度范围内继续进行。此过程对低级别网格的分割单元依次逐步进行重复,直至达到限制或不再有要计数的单元为止。
例如,上图显示了一个完全适合第 1 级网格的单元 15 的八边形。在此图中,单元 15 已进行分割,将八边形分成了九个二级单元。此图假定每对象单元数限制为 9 或更大。然而,如果每对象单元数限制为 8 或更小,则单元 15 将不进行分割,而只为该对象对单元 15 进行计数。
默认情况下,每对象单元数限制为每个对象 16 个单元,这将在大多数空间索引的空间和精度之间提供一个令人满意的折中方案。然而,CREATE SPATIAL INDEX Transact-SQL 语句支持 CELLS_PER_OBJECT=n 子句,使用该子句可以指定介于 1 和 8192(包含这两者)之间的每对象单元数限制。
注意:
|
空间索引的 cells_per_object 设置显示在 sys.spatial_index_tessellations 目录视图中。
|
最深单元规则
最深单元规则利用每个较低级别单元属于其上级单元这一事实:第 4 级单元属于第 3 级单元,第 3 级单元属于第 2 级单元,第 2 级单元属于第 1 级单元。例如,属于单元 1.1.1.1 的对象也属于单元 1.1.1、单元 1.1 以及单元 1。这种单元层次结构关系知识已内置于查询处理器中。因此,只有最深级别的单元需要记录在索引中,从而最大限度地减少了索引需要存储的信息。
在下图中,相对较小的菱形多边形被分割。索引使用默认的每对象单元数限制 16,此对象较小,未达到该限制。因此,分割一直下至第 4 级。此多边形驻留在以下的第 1 级到第 3 级的单元中:4、4.4 以及 4.4.10 和 4.4.14。然而,使用最深单元规则,分割将仅对十二个位于第 4 级的单元进行计数:4.4.10.13-15 以及 4.4.14.1-3、4.4.14.5-7 和 4.4.14.9-11。
分割方案
空间索引的行为部分取决于“分割方案”。分割方案特定于数据类型。在 SQL Server 2008 中,空间索引支持两种分割方案:
· “几何图形网格分割”,这是适用于 geometry 数据类型的方案。
· 地理网格分割方案,该方案适用于数据类型为 geography 的列。
注意:
|
空间索引的 tessellation_scheme 设置显示在 sys.spatial_index_tessellations 目录视图中。
|
几何图形网格分割方案
几何图形网格分割是适用于 geometry 数据类型的默认分割方案。在 SQL Server 2008 中,它是唯一的此类分割方案。本部分讨论了与使用空间索引有关的几何图形网格分割的几个方面:支持的方法和边界框。
注意:
|
您可以使用 CREATE SPATIAL INDEX Transact-SQL 语句的 USING GEOMETRY_GRID 子句显式指定此分割方案。
|
支持的几何图形方法
空间索引旨在通过充当对象筛选器来减少将面向集合的方法应用于空间列的开销。geometry 数据类型提供了一些内置的方法,以构造用于描述几何对象的 geometry 实例并使用这些实例。在某些条件下,空间索引支持多种面向集合的几何图形方法,如 STIntersects() 和 STTouches()。
有关由空间索引提供的几何图形方法支持的详细信息,请参阅空间索引支持的几何图形方法。
边界框
几何数据占有的平面可以是无限的。然而,在 SQL Server 2008 中,空间索引需要有限空间。为了建立有限空间以用于分解,几何图形网格分割方案需要矩形“边界框”。该边界框由四个坐标 (x-min,y-min) 和 (x-max,y-max) 定义,这些坐标存储为空间索引的属性。这些坐标所表示的意义如下:
· x-min 是边界框左下角的 x 坐标。
· y-min 是左下角的 y 坐标。
· x-max 是右上角的 x 坐标。
· y-max 是右上角的 y 坐标。
注意:
|
这些坐标通过 CREATE SPATIAL INDEX Transact-SQL 语句的 BOUNDING_BOX 子句指定。
|
(x-min,y-min) 和 (x-max,y-max) 坐标确定边界框的位置和尺寸。边界框的外部空间视作一个编号为 0 的单元。
空间索引将分解边界框的内部空间。网格层次结构的第 1 级网格将填充边界框。若要在网格层次结构中放置几何对象,空间索引会将该对象的坐标与边界框的坐标进行比较。
下图显示了由边界框的 (x-min,y-min) 和 (x-max,y-max) 坐标定义的点。网格层次结构的顶级显示为 4x4 网格。出于演示的目的,这里省略了较低级别。边界框的外部空间用零 (0) 指示。请注意,对象“A”部分超出了边界框,对象“B”完全位于边界框外部,即单元 0 中。
边界框与应用程序空间数据的某些部分相对应。索引的边界框是完全包含存储在空间列中的数据还是只包含其中部分数据取决于应用程序。只有针对完全位于边界框内部的对象的计算操作才会受益于空间索引。因此,若要获得 geometry 列的空间索引所能提供的最大优势,您需要指定一个包含所有或大多数对象的边界框。
注意:
|
空间索引的网格密度显示在 sys.spatial_index_tessellations 目录视图的 bounding_box_xmin、bounding_box_ymin、bounding_box_xmax 和 bounding_box_ymax 列中。
|
地理网格分割方案
此分割方案仅适用于 geography 列。此部分总结了地理网格分割支持的方法,并讨论了如何将测量空间投影到平面上,该平面随后将分解成网格层次结构。
注意:
|
您可以使用 CREATE SPATIAL INDEX Transact-SQL 语句的 USING GEOGRAPHY_GRID 子句显式指定此分割方案。
|
支持的地理方法
geography 数据类型提供了一些内置的方法,用来构造和操作描述地理对象的 geography“实例”。在某些条件下,空间索引支持以下面向集合的地理方法:STIntersects()、 STEquals() 和 STDistance()。geography 数据类型列上的空间索引会筛选对象,并降低将这些方法应用于空间数据的性能和查询开销。
有关由空间索引提供的地理方法支持的详细信息,请参阅空间索引支持的地域方法。
将测量空间投影到平面上
对 geography 实例(对象)的计算将包含对象的空间视作测量椭圆体。若要分解此空间,地理网格分割方案将椭圆体表面分为上半球和下半球,然后执行下列步骤:
1. 将每个半球投影在四边形棱锥图面上。
2. 将两个棱锥图平展开。
3. 联接平展的棱锥图以形成非欧几里得平面。
下图显示了此三步分解过程的示意图。在棱锥图中,虚线表示每个棱锥图的四个面的边界。步骤 1 和 2 显示测量椭圆体,使用一条绿色水平线表示赤道经线,使用一系列绿色垂直线表示若干条纬线。步骤 1 显示要投影在两个半球上的棱锥图。步骤 2 显示要平展的棱锥图。步骤 3 显示平展的棱锥图,这些棱锥图已组合起来形成一个平面,显示出许多投影的经线。请注意,这些投影线伸直后长度不一,具体取决于它们落在棱锥图上的位置。
空间投影到平面上之后,此平面将会分解成四级网格层次结构。不同级别可以使用不同的网格密度。下图显示了已分解成一个 4x4 的 1 级网格后的平面。出于演示目的,这里省略了网格层次结构的较低级别。事实上,此平面完全分解成了一个四级网格层次结构。分解过程完成后,将逐行从 geography 列读取地理数据,并为每个对象依次执行分割过程。
空间索引支持
可以仅对空间列创建空间索引。可以对支持空间索引的表的任何空间列创建空间索引,并可以对给定的空间列创建多个空间索引。有关对空间索引的限制的详细信息,请参阅对空间索引的限制。
建立一个空间索引
右键单击“索引”,再选择“新建索引”。
在“索引名称”字段中,输入索引的名称。
在“索引类型”下拉列表中,选择“空间”。
点击“添加”按钮,选择空间字段
当对 geometry 类型列创建索引时,必须指定边界框的 (X-min,Y-min) 和 (X-max,Y-max) 坐标。对于 geography 类型列的索引,当您指定“地理网格”分割方案后,边界框字段变为只读状态,因为地理网格分割不使用边界框。
您还可以指定任意级别的分割方案的“每个对象的单元格数”字段和网格密度的非默认值。每个对象的单元格数的默认数字为 16,默认的网格密度为“中”。
“边界框”为几何平面的顶级网格的周界。边界框参数仅存在于几何图形网格分割中。如果“分割方案”为“地理网格”,这些参数呈灰色。
面板将显示边界框的(X-min、Y-min)和(X-max、Y-max)坐标。没有任何默认坐标值。因此,在对 geometry 类型列创建新的空间索引时,必须指定坐标值。
X 最小值
边界框左下角的 X 坐标。
Y 最小值
边界框左下角的 Y 坐标。
X 最大值
边界框右上角的 X 坐标。
Y 最大值
边界框右上角的 Y 坐标。
“分割方案”
指示索引的分割方案。支持的分割方案包括:
“几何图形网格”
指定“几何图形网格”分割方案,它适用于 geometry 数据类型的列。
“地理网格”
指定“地理网格”分割方案,它适用于 geography 数据类型的列。
每个对象的单元格数
指示可用于索引中单个空间对象的每个对象的分割单元格数。该数字可以是 1 和 8192 之间(含 1 和 8192)的任何整数。默认值为 16。
在顶层,如果对象包含的单元格多于 n 指定的单元格,则索引操作将根据需要使用尽可能多的单元格来提供完整的顶级分割。在这种情况下,对象收到的单元格数可能会大于指定的单元格数。这种情况下,最大数量即为顶级网格创建的单元格数,这取决于“级别 1”的密度。
网格
此面板显示分割方案的每个级别上网格的密度。密度可指定为“低”、“中”或“高”三个级别。默认值为“中”。“低”表示 4x4 网格(16 个单元格)、“中”表示 8x8 网格(64 个单元格)而“高”表示 16x16 网格(256 个单元格)。
级别 1
第一级(顶级)网格的密度。
级别 2
第二级网格的密度。
级别 3
第三级网格的密度。
级别 4
第四级网格的密度。
结果如下图:
分享到:
相关推荐
2008新特性)、数据库安全(SQL Server 2008 安全数据文件安全与灾难恢复、 复制)、SQL开发(数据库设计、SQL Server与CLR集成、在SQL Server中使用 XML、使用ADO.NET、使用SMO编程管理数据库对象、高级T-SQL、...
SqlServer2008R2数据库驱动包是针对微软SQL Server 2008 R2版本的一个关键组件,它使得应用程序能够通过Java编程语言与SQL Server进行通信。驱动包包括两个不同版本的Java Archive (JAR) 文件,分别对应于JDBC(Java...
### 关于《Inside Microsoft SQL Server 2008 - T-SQL Querying》的知识点解析 #### 一、概述 《Inside Microsoft SQL Server 2008 - T-SQL Querying》是一本深入探讨Microsoft SQL Server 2008中T-SQL查询技术的...
### SQL Server 2008 维护计划实现数据库定时自动备份详解 #### 核心概念解析 在探讨SQL Server 2008维护计划如何实现数据库定时自动备份之前,我们首先需要理解几个核心概念: - **数据安全与备份**:在IT行业中...
《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》这本书是针对SQL Server 2008这一重要数据库管理系统所编写的一本全面指南。SQL Server 2008作为微软公司的一个里程碑产品,引入了众多创新...
SQL Server 2008是Microsoft公司推出的一款强大的关系型数据库管理系统,广泛应用于企业级数据存储和处理。本资源提供了该课程前六章的课后答案,特别适合学生和自学者用来检验学习成果和理解课程内容。 1. **...
《数据库系统原理与应用》是计算机科学领域的一本经典教材,尤其在讲解SQL Server 2012这一数据库管理系统时,提供了深入浅出的理论知识和实际操作指导。本电子教案针对第三版进行了全面更新,旨在帮助学生和教师更...
在SQL Server中,空间索引是提高空间数据查询性能的关键技术之一。空间索引可以使用“CREATE SPATIAL INDEX”命令来创建,用于快速查询和检索空间数据。 ### 结论 综上所述,从文件中提取的知识点包括了SQL Server...
《SQL Server 2012数据库技术与应用》是一门深度探讨关系型数据库管理系统SQL Server 2012的课程,旨在帮助学习者掌握数据库设计、管理、优化以及实际应用等核心技能。作为微课版,它可能包含了视频教程、实践案例、...
"关系型数据库及SQL语句-SQLSERVER数据库设计与实现" 关系型数据库是一种常用的数据库管理系统,它使用SQL语句来管理和操作数据。在本文中,我们将介绍关系型数据库的基本概念、SQL语句的使用以及SQLSERVER数据库...
以上内容涵盖了 SQL Server 2008 视频教程中的关键知识点,通过深入学习这些内容,可以帮助初学者快速掌握 SQL Server 2008 的使用技巧,并能够应对实际工作中的挑战。希望本教程能成为您学习 SQL Server 2008 的...
SQL Server 2008是微软推出的一款关系型数据库管理系统,它在企业级数据管理和分析领域扮演着重要的角色。NorthWind是一个经典的示例数据库,广泛用于SQL Server的学习和教学,帮助用户了解数据库的设计、查询以及...
【SQL Server 2008 数据库创建及基础详解】 SQL Server 2008 是一个功能强大的数据库管理系统,提供了一整套用于存储、管理和检索数据的工具。本教程主要介绍如何创建数据库以及数据库的基础知识,包括数据库对象、...
《SQLServer2016数据库原理及应用》是一门深入探讨SQL Server 2016这一强大数据库管理系统的基础与高级特性的课程。本课程重点在于理解数据库的基本概念、设计原则以及在实际工作中的应用,同时涵盖了SQL Server ...
在SQL Server中,创建索引是一项关键的数据库优化技术,旨在加速数据检索速度,提高查询性能。本文将深入探讨如何在SQL Server中创建索引,包括理解不同类型的索引、索引的创建语法以及如何利用索引提升数据库性能。...
SQL Server 2008 是由微软开发的一款先进的关系型数据库管理系统,该系统在2008年正式发布。作为SQL Server家族中的重要成员之一,它不仅继承了之前版本的诸多优点,还引入了一系列新的特性和改进,旨在为用户提供...
SQL Server 2008 数据库性能优化是数据库管理员和开发者需要掌握的一项重要技能,涉及到数据库设计、索引、表结构、查询优化、存储过程等多个方面。下面我们将从表设计优化、字段设计优化、索引优化、查询优化等方面...
综上所述,这份SQLServer数据库实验指导书提供了全面的实践练习,涵盖数据库的获取、安装、基本操作、表空间管理、表和索引的创建等核心概念,是学习和提升SQLServer数据库技能的理想资源。通过这些实验,学习者能够...
通过“sqlserver2008数据库实例练习”,你可以学习并掌握如何操作数据库,包括对数据进行查询、更新、插入和删除等基本操作。这个例子是一个学生成绩管理系统,它提供了实际场景来练习数据库技能。 首先,我们需要...