SQL Azure 切换聚集和非聚集索引

Posted

技术标签:

【中文标题】SQL Azure 切换聚集和非聚集索引【英文标题】:SQl Azure Switching Clusterd and Non Clustered Index 【发布时间】:2016-07-22 08:30:06 【问题描述】:

我的桌子上有两个索引:

CREATE CLUSTERED INDEX [IXAddrbookCrtDtm] ON [dbo].[Addrbook]
(
     [AbkOrgGrpID] ASC,
     [AddrbookID] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
      SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF,
      ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO

ALTER TABLE [dbo].[Addrbook]
    ADD CONSTRAINT [PKAddrbook_New]
      PRIMARY KEY NONCLUSTERED 
      (
       [AbkOrgGrpID] ASC,
       [AddrbookID] ASC
      )
      WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
            SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, 
            ONLINE = OFF, ALLOW_ROW_LOCKS = ON,
           ALLOW_PAGE_LOCKS = ON)
GO

我只需要一个聚集主键索引而不是以上两个。删除并重新创建表不是一种选择。

有没有类似的

CREATE CLUSTERED INDEX IXAddrbookCrtDtm ON
    Addrbook(AbkOrgGrpID,AddrbookID)
    PRIMARY KEY  WITH (DROP_EXISTING = ON);

这样我就可以删除非聚集索引了吗?

【问题讨论】:

【参考方案1】:

删除两个索引并创建新索引,而不是删除表。

涉及的步骤..

删除索引

在 [dbo].[Addrbook] 上删除索引 IXAddrbookCrtDtm

删除约束

更改表 [dbo].[Addrbook] 删除约束 PKAddrbook_New

创建新的主键

alter table [dbo].[Addrbook] 添加主键 (AbkOrgGrpID,AddrbookID)

【讨论】:

Azure SQL DB 是否允许我在不重新创建表的情况下删除聚集索引? 你不需要删除表 有V12,如果你在上面,不是强制性的:sqlmag.com/sql-server/indexes-azure-sql-database-v12

以上是关于SQL Azure 切换聚集和非聚集索引的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server的聚集索引和非聚集索引

MySQL中怎样创建聚集索引和非聚集索引,求创建这两种索引的SQL语句。谢谢

SQL中基于聚集索引和非聚集索引优化查询?

SQL Server:聚集和非聚集索引[重复]

SQL SERVER数据库 唯一索引 非唯一索引 聚集索引 非聚集索引 之间区别

聚集索引和非聚集索引