【问题标题】:Possible performance change if column NOT NULL UNIQUE CLUSTERED INDEX will be Primary Key如果列 NOT NULL UNIQUE CLUSTERED INDEX 将是主键,则可能的性能变化
【发布时间】:2018-05-02 06:43:21
【问题描述】:

如果将列声明为NOT NULL UNIQUE CLUSTERED INDEX,是否将其设为PRIMARY KEY 会对性能或其他方面进行任何实际更改?

【问题讨论】:

    标签: sql-server database-indexes


    【解决方案1】:

    它应该没有任何影响。在几个手波1 内,PRIMARY KEYUNIQUE KEY 相同,附加条件是所有列都强制为非 NULL。因此,将此列装饰为 PRIMARY KEY 不应导致实现该表的物理数据结构2发生任何变化。

    CLUSTERED 是一个完全独立的概念——有时与PRIMARY KEY 混为一谈。如果一个表没有CLUSTERED INDEX 并且添加了PRIMARY KEY,那么默认情况下,它也将被定义为CLUSTERED INDEX。但如果需要,可以覆盖此行为,并且在实践中这两者并没有联系在一起。


    1目前我实际上想不出任何相关的差异,但这只是为了避免吹毛求疵,希望如此。

    2聚集索引和任何非聚集索引和统计信息。

    【讨论】:

    • 事实上,标准 SQL 中的基本 UNIQUE 定义也强制使用 NOT NULL:没有功能 T591,“可能为空列的唯一约束”,在符合 SQL 语言中,如果指定了 UNIQUE,则 包含在 中的每一列的 应包含NOT NULL。
    【解决方案2】:

    PRIMARY KEY 不允许 null 并且必须是唯一的,约束 NOT NULL UNIQUE 也可以像 PRIMARY KEY 一样将类似的规则应用到列中,但是,您的表只能有一个主键,但可以有多个NOT NULL UNIQUE 列。

    通过NOT NULL UNIQUE CLUSTERED INDEXPRIMARY KEY,两者都将像在 CLUSTERED INDEX 中一样存储、排序和结构化,因此在选择、插入、更新或删除的操作性能基础上,应该没有什么不同

    唯一的区别可能在于元数据本身。

    【讨论】:

      猜你喜欢
      • 2020-02-14
      • 2011-10-22
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多