7

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

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

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

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

(Oracle 中的等价物是 Hash Cluster)

谢谢你的帮助。

4

2 回答 2

3

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

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

这将非常有效。

于 2012-04-04T18:06:34.333 回答
0

根据我的基准,最好的方法是为键创建一个哈希列。详情

于 2013-01-29T11:09:46.850 回答