SQL Server如何在内部维护空间索引?

时间:2018-04-11 13:47:41

标签: sql-server sql-server-2008 sql-server-2012 spatial-index

我知道索引是使用B-Tree实现的。我已阅读有关空间索引的Microsoft文档。它们似乎也使用B树实现空间数据。

但为什么需要网格或网格层次结构如何工作或SQL Server如何使用空间数据值进行搜索?所有这些东西对我来说仍然不清楚。

如果有人请解释,那将非常有帮助。

谢谢:-)

1 个答案:

答案 0 :(得分:0)

您可能知道,SQL Server中的标准索引使用B +树结构,这是B树索引的变体。 B树只不过是一种数据结构,可以对数据进行排序,以支持搜索操作,顺序访问和数据修改,例如插入和删除。

B树索引包含至少两个级别:根和叶。根是最顶层的节点,可以有子节点。如果没有子节点,则该树称为Null树。如果存在子节点,则它们可以是叶节点或中间节点。叶节点是树的底部。根级别和叶级别之间可以存在中级别。 B树索引和B +树索引之间的区别在于所有记录仅存储在B +树的叶级别,而在B树中,我们可以将密钥和数据存储在中间节点中。

SQL Server空间索引构建在B +树结构之上,允许索引使用该结构及其访问方法。空间索引还使用XML索引的基本原则。 XML索引是在SQL Server 2005中引入的,它支持两种基本类型的索引:主索引和辅助索引。主XML索引是一个B +树,它实际上为XML实例中的每个节点包含一行。

那么SQL Server如何实现空间索引?如前所述,SQL Server以B +树结构开始,它以线性方式组织数据。因此,索引必须能够将二维空间信息表示为线性数据。为此,SQL Server使用一个称为空间分层均匀分解的过程。创建索引时,数据库引擎将空间分解或重构为沿四级网格层次结构对齐的轴集合。图1概述了此过程的外观。

enter image description here

取自 https://www.red-gate.com/simple-talk/sql/t-sql-programming/sql-server-spatial-indexes/