首页 > 解决方案 > SQL 数据库 - 散列多个主键

问题描述

我想问你在什么情况下散列一个 SQL 表的主键(如果你有多个)是一个不错的选择。(将主键列添加为普通列并添加一个主键列,其中包含所有主键上方的哈希)?性能是否有任何改进,或者一个好的 SQL 实现可以自己做吗?

如果这会导致性能改进,哪些指令会得到改进?

标签: sqlperformanceoptimizationhash

解决方案


首先,并非所有数据库都支持哈希索引,因此您的问题是高度特定于数据库的。我注意到这一点是因为您的问题没有指定数据库。

其次,即使在支持的数据库中,主键也可能不支持散列索引。

数据库中使用的标准 B-Tree 索引对于主键来说已经足够了。哈希索引在一些重要方面与 B-Tree 不同。但值得注意的是,哈希索引只支持相等操作,不支持不等式。

哈希索引更接近于 O(1) 查找时间(但不要忘记哈希表可能会发生冲突并且可能需要溢出到磁盘上)。这比 B-Tree 的 O(log n) 时间稍微好一点——但对数非常小,即使在数百万或数十亿行数据上也是如此。

在实践中,即使数据库支持它,我也没有看到任何强烈的理由使用哈希索引作为主键。如果我要创建一个合理的用例,我将从一个大规模并行分布式数据库开始,其中主键也将用于分发数据。


推荐阅读