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)
谢谢你的帮助.
SQL Server 中没有这样的东西。您唯一的选择是索引。如果您要请求给定键的所有列,则应该使用聚集索引。如果您只想请求一个子集,则应该使用仅包含您想要的列的非聚集索引,如下所示:
create index IX_MyBigTable on MyBigTable(keyColumn) include (col1, col2, col3youneed);
Run Code Online (Sandbox Code Playgroud)
这将非常有效。