sql - SQL Server 中的哈希集等效项

标签 sql sql-server hash cluster-computing hashset

我想创建一个始终通过唯一键访问的大型表(约 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/

相关文章:

mysql - 复合 Mysql join sql 中每组所需的最大 n

sql - postgresql 中用户选择的可变间隔选项

sql - 我需要显示每月库存数据

arrays - 如何从我的散列中删除一个 nil 键?

javascript - MurmurHash3_32 Java 返回负数

c++ - 在哈希表中查找项目的位置

python - 带有嵌套选择的 SQL Delete 语句

mysql - 如何提高 MySQL 查询的性能

sql-server - 如何将数字格式化为带有填充零的字符串?

sql-server - 无法使用 Kerberos 从 RHEL 服务器 7.4 连接到 SQL 服务器