在 SQL Server O(n) 中检查重复主键的运行时间是 O(n) 吗?

5 sql-server

我很好奇,我找不到太多关于这方面的信息。检查主键之间的重复项也是 O(n) 吗?

大多数其他 SQL 数据库是否相同?

有没有列出这些信息的地方?

usr*_*usr 7

SQL Server 中的主键始终由索引(实际上,非 Hekaton 表的 B 树)支持。索引允许O(log N)查找(和重复检查)。

在实践中,O(1)即使你瞄准了行为,也很难衡量行为的差异。较高的索引级别往往会被缓存,并且树非常平坦。SQL Server 中的最大树级别为 15 级(您需要加载具有约 900 字节键的索引页以强制最小扇出)。

每个索引行的大小必须为 807 字节,以在页面上最多容纳 9 个。那么,L 层的索引大小为807*9^L。L 从 1 开始L == 15 => 807*9^15/10^12 = 166154 TB最大数据库大小: 524,272 TB。所以最高等级是15。

  • 这几乎回答了我的问题,谢谢! (2认同)
  • “*在实践中它是 O(1),因为较高的索引级别往往会被缓存*” - 缓存不会改变复杂性。那仍然是 O(log N)。所涉及的操作速度更快,但仍然需要相同的*数量*的操作。 (2认同)