如何删除主键的聚集索引
2014-11-21 02:12
197 查看
当我们对一个表建立一个主键时,默认会给该主键列添加一条聚集索引,这是数据库内部自动建立的,唯一性约束也会默认创建一个非聚集索引。
![](http://images.cnitblog.com/blog/89844/201306/07214239-2c9d4aa5573940c0bb7a1db9963f6d8c.png)
上面我们建立了一个主键id 和唯一性约束的name列,查看表可以看到这时产生了两个索引
聚集索引是一个宝贵的资源,在一些表的中有时我们永远不会用到主键来作为查询条件,或者作为其他表的外键,这时主键的聚集索引
就显得大才小用了,我们希望将聚集索引建立在其他真正需要的字段,不过当我们执行删除操作时会报以下错误
消息 3723,级别 16,状态 4,第 1 行
不允许对索引 'MyTable.PK__MyTable__3213E83F145C0A3F' 显式地使用 DROP INDEX。该索引正用于 PRIMARY KEY 约束的强制执行
不过我们可以先删除主键约束,这样聚集所以就自动删除了
我们再看下聚集索引已经不存在了
![](http://images.cnitblog.com/blog/89844/201306/07220412-f61d647631284703a6f14382f5bd97a7.png)
当然唯一约束所引起的索引也可以同样的方式操作,先删除唯一约束
create table MyTable ( id int identity(1,1) primary key, name nvarchar(10) unique ) exec sp_helpindex MyTable
![](http://images.cnitblog.com/blog/89844/201306/07214239-2c9d4aa5573940c0bb7a1db9963f6d8c.png)
上面我们建立了一个主键id 和唯一性约束的name列,查看表可以看到这时产生了两个索引
聚集索引是一个宝贵的资源,在一些表的中有时我们永远不会用到主键来作为查询条件,或者作为其他表的外键,这时主键的聚集索引
就显得大才小用了,我们希望将聚集索引建立在其他真正需要的字段,不过当我们执行删除操作时会报以下错误
消息 3723,级别 16,状态 4,第 1 行
不允许对索引 'MyTable.PK__MyTable__3213E83F145C0A3F' 显式地使用 DROP INDEX。该索引正用于 PRIMARY KEY 约束的强制执行
不过我们可以先删除主键约束,这样聚集所以就自动删除了
alter table MyTable drop constraint PK__MyTable__3213E83F145C0A3F
我们再看下聚集索引已经不存在了
![](http://images.cnitblog.com/blog/89844/201306/07220412-f61d647631284703a6f14382f5bd97a7.png)
当然唯一约束所引起的索引也可以同样的方式操作,先删除唯一约束
相关文章推荐
- 如何删除主键的聚集索引
- 如何删除表的主键定义和索引定义呢?
- 如何删除通过主键和唯一约束创建的索引
- 如何删除通过主键和唯一约束创建的索引
- 如何删除mysql 主键索引
- 添加和删除索引以及如何给中间表添加两个主键
- SQL Server 索引基础知识(4)----主键与聚集索引
- sql 优化之:聚集索引的重要性和如何选择聚集索引(系列五)
- SQL Server2000 索引结构及其使用 (聚集索引的重要性和如何选择聚集索引)
- 删除数据库的所有存储过程、主键、外键、索引等
- SQL Server 索引使用分析(4)- 如何选择聚集索引
- SQL Server 索引基础知识(4)----主键与聚集索引(转自蝈蝈俊.net)
- sql中创建主键非聚集索引和聚集索引
- 在ACCESS中如何添加、删除表的“索引:有(无重复)”属性?
- 如何建立主键、外键、索引、重建索引等
- 同时建立主键(PRIMARY KEY)与聚集索引(Clustered Index)的先后顺序
- 你知道如何查询/删除/建立DB2数据表的主键吗?
- sql中创建主键非聚集索引和聚集索引
- 聚集索引的重要性和如何选择聚集索引
- 禁用聚集索引来阻止对表的访问(暂停使用某个表,但不删除)