【问题标题】:Select by O(1) from SQL table从 SQL 表中按 O(1) 选择
【发布时间】:2013-12-09 12:07:10
【问题描述】:

我正在寻找按 O(1) 运行选择查询的方法。
我可以通过主键选择需要 O (1) 时间复杂度的方式创建索引吗?

【问题讨论】:

  • SQL 选择上的 Big-O?
  • SQL Server Hash Indexes的可能重复
  • @wilx 那个“重复”是基于一个误解,即CHECKSUM 函数创建了一个哈希索引(它没有)并且是从 2008 年开始的。SQL Server 的下一个版本(或当前版本)对于像这个网站这样的早期采用者)确实支持哈希索引。

标签: sql sql-server select indexing time-complexity


【解决方案1】:

clustered primary key 被组织为 b-tree

集群键不是hash-based indexO(1) 需要它。

我相信 b-tree 搜索是 O(log n)

所以不,你不能

以这种方式创建索引,主键 SELECT 将占用 O (1) 时间复杂度?

【讨论】:

  • 似乎应该有一种方法可以在 O(1) 时间内通过 id(主键)进行搜索。至少当所有表字段的字节数固定时。它本质上与数组的功能相同,只需将address + offset 直接计算为load 行。不需要索引(基于树或散列)。
【解决方案2】:

IIRC,一些 RDBMS 引擎有哈希表索引。那会让AFAIK给你摊销 随心所欲的恒定时间。 AFAICT,MS SQL Server 没有此功能。

【讨论】:

    【解决方案3】:

    SQL Server 2014 是否允许hash indexes

    仅适用于声明为内存优化的表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多