Hashset在SQL Server中等效

use*_*169 7 sql sql-server hash cluster-computing hashset

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

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

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

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

(Oracle中的等价物是Hash Cluster)

谢谢你的帮助.

Joh*_*ibb 3

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

  create index IX_MyBigTable on MyBigTable(keyColumn) include (col1, col2, col3youneed);
Run Code Online (Sandbox Code Playgroud)

这将非常有效。