我想创建一个始终通过唯一键访问的大型表(约 450 亿行)。
在数据库之外,保存此数据的最佳结构是字典或哈希集,但当然,由于数据的大小,不可能在数据库之外执行此操作。
SQL Server 是否提供针对键值访问进行优化的结构?我知道聚集键非常快,但它仍然是一个索引,因此会有一些与遍历索引页相关的额外磁盘读取。我希望从 SQL Server 获得的是一种“ native ”结构,它将数据存储为键值对,然后可以根据键访问值。
换句话说,我的问题是如何在 SQL Server 中存储 450 亿行并在没有索引(聚集或非聚集)的情况下有效地访问它们,因为读取索引非叶页可能会导致大量 IO,并且由于每个值都可以通过唯一的键访问,应该可以有一个结构,其中键的散列解析为值的物理位置。要获得 1 个值,我们需要执行 1 次读取(除非存在哈希冲突)。
(Oracle 中的等效项是哈希集群)
感谢您的帮助。
最佳答案
SQL Server 中没有这样的东西。您唯一的选择是索引。如果您要请求给定键的所有列,则应该使用聚集索引。如果您只想请求一个子集,则应该使用仅包含您想要的列的非聚集索引,如下所示:
create index IX_MyBigTable on MyBigTable(keyColumn) include (col1, col2, col3youneed);
这将非常有效。
关于sql - SQL Server 中的哈希集等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10016750/