【问题标题】:SQL Server clustered index with part key [closed]带有部分键的 SQL Server 聚集索引 [关闭]
【发布时间】:2014-06-04 15:49:31
【问题描述】:

主键由 4 列组成但在聚集索引中只包含其中 3 列的 SQL 是什么?

是否也可以在 SQL Server Management Studio 中执行此操作?

【问题讨论】:

  • 好奇,你为什么要那个?
  • 因为其中一个字段仅用于使行唯一,并且只会使索引大于所需的大小。
  • 如果它是一个非常宽的列,是的,这是有道理的。你知道 CI 会在需要的地方附加一个隐藏的(4 字节)列,不是吗?
  • 你能再解释一下吗?

标签: sql sql-server indexing


【解决方案1】:

你需要定义两个不同的东西:

  1. 四列上的非聚集主键

    ALTER TABLE dbo.YourTable
    ADD CONSTRAINT PK_YourTable
    PRIMARY KEY NONCLUSTERED (Col1, Col2, Col3, Col4)
    
  2. 在您的四列中的三列上有一个单独的聚类索引

    CREATE CLUSTERED INDEX CIX_YourTable
    ON dbo.YourTable(Col1, Col3, Col4)  
    -- adapt this to use those three columns you want
    

是的 - 当然,您可以在 SQL Server Management Studio 中执行这些 T-SQL 脚本 :-)

更新:要在 GUI 中使用 clicky-mousy-GUI-tools 执行此操作,您需要执行以下步骤:

  1. 在对象资源管理器中,在您的表上,您需要首先通过转到 Indexes > New Index > Clustered Index 来定义聚集索引 - 为其命名并添加所需的列

  2. 完成此操作后,然后您可以在通常的表设计器视图中定义主键,并且由于已经存在聚集索引,它将成为非聚集主键

我还没有找到其他方法——如果你先创建主键,它就会变成一个集群主键,我发现在它创建后没有办法改变它

【讨论】:

  • 谢谢,我的意思是在 gui 中
  • @MikeAlike234 也许你应该学会不使用 GUI
  • 当然,我知道这两种方式
  • @MikeAlike234 您认为这种“应该更快”是否值得使用附加列维护一个完全独立且几乎完全冗余的索引?
  • @MikeAlike234 如果您需要强制列的唯一性,则该列需要是 an 索引中的键列。 (PK 和唯一约束作为索引在幕后实现。)所以我不确定如何让列成为键但不在索引中。
猜你喜欢
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 2018-05-08
相关资源
最近更新 更多