Hashset在SQL Server中等效

时间:2012-04-04 18:02:27

标签: sql sql-server hash cluster-computing hashset

我想创建一个总是由唯一键访问的大表(大约450亿行)。

在DB之外,保存它的最佳结构是Dictionary或HashSet,但当然由于数据的大小,不可能在数据库之外执行此操作。

SQL Server是否提供针对键值访问优化的结构?我知道群集密钥非常快,但它仍然是一个索引,因此会有一些额外的磁盘读取与遍历索引页面相关联。我想从SQL Server获得的是一个“本机”结构,它将数据存储为键值对,然后可以根据键访问值。

换句话说,我的问题是如何在SQL Server中存储450亿行并有效地访问它们而不具有索引,群集或非群集,因为读取索引非叶子页面可能会导致大量IO,并且因为每个值都可以通过唯一键访问,应该可以有一个结构,其中键的散列解析为值的物理位置。要获得1个值,我们需要进行1次读取(除非存在哈希冲突)。

(Oracle中的等价物是Hash Cluster)

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

在SQL Server中没有这样的东西。您唯一的选择是索引。如果您要请求给定键的所有列,则应使用聚簇索引。如果您只是要请求一个子集,您应该使用非聚集索引,只包括您想要的列:

  create index IX_MyBigTable on MyBigTable(keyColumn) include (col1, col2, col3youneed);

这非常有效。

答案 1 :(得分:0)

根据我的基准测试,最好的方法是为密钥创建哈希列。 Details