SQL 服务器列存储索引的底层存储和搜索算法是什么
What is the underlying Storage and Search Algorithm for SQL Server Columnstore Indexes
我试图弄清楚列存储索引在 SQL 服务器中的工作原理。我正在寻找的是底层存储的技术参考指南或白皮书以及 Columnstore 索引的随附搜索算法,特别是关于 SQL 2016(以防与早期版本不同)。我什至不知道这个 algorithm/design 是否有正式的学术名称,因为我在我查看的 Microsoft 文档中没有发现任何类似的东西。
与我所追求的传统行存储索引相同的是,它们的底层存储和搜索算法基于 B+ 树。 B+ 树算法有大量的白皮书需要消化。我看到的关于 Columnstore 索引的唯一算法参考与 DeltaStore 功能有关,它也是 based on B+ Trees.
我希望底层存储和搜索算法不是专有的,我的 Google 技能只是让我失望,但如果事实证明这是专有的,知道这将有助于平息我的好奇心。如有任何帮助,我们将不胜感激!
任何关于以高价出售的产品的内部数据结构的信息都不会公布完整的细节。对于 SQL 服务器,有来自 MSFT 的书籍,例如 this one,其中讨论了内部结构。
关于查找您真正想要的详细信息:YMMV。
此时,我遇到的最好的资源是 The-Paper-Trail.org 的关于列式存储的博客 post。它没有涉及搜索算法背后的细节,但它对底层存储背后有一些很好的解释以及对学术白皮书的额外参考。如果其他人对此感兴趣,我强烈建议您尽早查看此页面。
编辑: 进一步阅读后,列存储索引的 "search algorithm" 看起来基本上是索引的普通扫描,少了行存储消除和列消除。通过以批处理模式针对高度压缩的数据执行扫描操作(由于按列存储模型)并且根据查询,聚合和字符串谓词下推优化可以进一步限制从磁盘中提取的记录,从而使扫描操作更加高效。 Columnstore indexes - query performance
这两个资源结合在一起可以很好地了解幕后情况,所以如果您有兴趣,请看一看。最后,忠告一句;忽略或跳过 SQL 2016 发布之前发布的大部分文献,因为在 SQL Server 的过去 3 个版本中,许多基本术语和逻辑发生了显着变化,我不会如果您要使用此功能,建议任何人使用早于 2016 年的任何东西。
编辑 2: 我从 Microsoft 中找到一篇文章,确认列存储索引不是 B+ 树。
我试图弄清楚列存储索引在 SQL 服务器中的工作原理。我正在寻找的是底层存储的技术参考指南或白皮书以及 Columnstore 索引的随附搜索算法,特别是关于 SQL 2016(以防与早期版本不同)。我什至不知道这个 algorithm/design 是否有正式的学术名称,因为我在我查看的 Microsoft 文档中没有发现任何类似的东西。
与我所追求的传统行存储索引相同的是,它们的底层存储和搜索算法基于 B+ 树。 B+ 树算法有大量的白皮书需要消化。我看到的关于 Columnstore 索引的唯一算法参考与 DeltaStore 功能有关,它也是 based on B+ Trees.
我希望底层存储和搜索算法不是专有的,我的 Google 技能只是让我失望,但如果事实证明这是专有的,知道这将有助于平息我的好奇心。如有任何帮助,我们将不胜感激!
任何关于以高价出售的产品的内部数据结构的信息都不会公布完整的细节。对于 SQL 服务器,有来自 MSFT 的书籍,例如 this one,其中讨论了内部结构。
关于查找您真正想要的详细信息:YMMV。
此时,我遇到的最好的资源是 The-Paper-Trail.org 的关于列式存储的博客 post。它没有涉及搜索算法背后的细节,但它对底层存储背后有一些很好的解释以及对学术白皮书的额外参考。如果其他人对此感兴趣,我强烈建议您尽早查看此页面。
编辑: 进一步阅读后,列存储索引的 "search algorithm" 看起来基本上是索引的普通扫描,少了行存储消除和列消除。通过以批处理模式针对高度压缩的数据执行扫描操作(由于按列存储模型)并且根据查询,聚合和字符串谓词下推优化可以进一步限制从磁盘中提取的记录,从而使扫描操作更加高效。 Columnstore indexes - query performance
这两个资源结合在一起可以很好地了解幕后情况,所以如果您有兴趣,请看一看。最后,忠告一句;忽略或跳过 SQL 2016 发布之前发布的大部分文献,因为在 SQL Server 的过去 3 个版本中,许多基本术语和逻辑发生了显着变化,我不会如果您要使用此功能,建议任何人使用早于 2016 年的任何东西。
编辑 2: 我从 Microsoft 中找到一篇文章,确认列存储索引不是 B+ 树。