【问题标题】:How does SQL Server maintain spatial index internally?SQL Server 内部如何维护空间索引?
【发布时间】:2018-04-11 13:47:41
【问题描述】:
我知道索引是使用 B-Tree 实现的。我已阅读有关空间索引的 Microsoft 文档。他们似乎也使用 B 树来实现空间数据。
但是为什么需要网格,或者网格层次结构如何工作,或者 SQL Server 如何使用空间数据值进行搜索?我还不清楚所有这些东西。
如果有人请解释一下,那将非常有帮助。
谢谢:-)
【问题讨论】:
标签:
sql-server
sql-server-2008
sql-server-2012
spatial-index
【解决方案1】:
您可能知道,SQL Server 中的标准索引使用 B+ 树结构,它是 B 树索引的变体。 B-tree 只不过是一种数据结构,它保持数据排序以支持搜索操作、顺序访问和数据修改(例如插入和删除)。
B-tree 索引至少包含两个级别:根和叶。根是最顶层的节点,可以有子节点。如果没有子节点,则该树称为 Null 树。如果有子节点,它们可以是叶节点或中间节点。叶节点是树的底部。中间层可以存在于根层和叶层之间。 B-树索引和B+树索引的区别在于B+树的所有记录都只存储在叶子层,而在B树中我们可以在中间节点存储键和数据。
SQL Server 空间索引建立在 B+ 树结构之上,这允许索引使用该结构及其访问方法。空间索引还使用 XML 索引的基本原理。 XML 索引是在 SQL Server 2005 中引入的,它支持两种基本类型的索引:主索引和辅助索引。主 XML 索引是一棵 B+ 树,它基本上为 XML 实例中的每个节点包含一行。
那么SQL Server是如何实现空间索引的呢?如前所述,SQL Server 从 B+ 树结构开始,将数据组织成线性方式。因此,索引必须有办法将二维空间信息表示为线性数据。为此,SQL Server 使用了一种称为空间分层统一分解的过程。创建索引时,数据库引擎将空间分解或重构为沿四级网格层次对齐的轴集合。图 1 概述了此过程的外观。
取自
https://www.red-gate.com/simple-talk/sql/t-sql-programming/sql-server-spatial-indexes/