SQL 服务器如何在内部维护空间索引?

How does SQL Server maintain spatial index internally?

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

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

如果有人能解释一下,那将非常有帮助。

谢谢 :-)

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

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

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

那么SQL服务器是如何实现空间索引的呢?如前所述,SQL 服务器以 B+ 树结构开始,它将数据组织成线性方式。因此,索引必须有办法将 two-dimensional 空间信息表示为线性数据。为此,SQL 服务器使用称为 space 的分层统一分解的过程。创建索引时,数据库引擎将 space 分解或重构为沿 four-level 网格层次结构对齐的轴集合。图 1 提供了此过程的概览。

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