如何删除主键的聚集索引
2013-06-07 22:06
393 查看
当我们对一个表建立一个主键时,默认会给该主键列添加一条聚集索引,这是数据库内部自动建立的,唯一性约束也会默认创建一个非聚集索引。
上面我们建立了一个主键id 和唯一性约束的name列,查看表可以看到这时产生了两个索引
聚集索引是一个宝贵的资源,在一些表的中有时我们永远不会用到主键来作为查询条件,或者作为其他表的外键,这时主键的聚集索引
就显得大才小用了,我们希望将聚集索引建立在其他真正需要的字段,不过当我们执行删除操作时会报以下错误
消息 3723,级别 16,状态 4,第 1 行
不允许对索引 'MyTable.PK__MyTable__3213E83F145C0A3F' 显式地使用 DROP INDEX。该索引正用于 PRIMARY KEY 约束的强制执行
不过我们可以先删除主键约束,这样聚集所以就自动删除了
我们再看下聚集索引已经不存在了
当然唯一约束所引起的索引也可以同样的方式操作,先删除唯一约束
create table MyTable ( id int identity(1,1) primary key, name nvarchar(10) unique ) exec sp_helpindex MyTable
上面我们建立了一个主键id 和唯一性约束的name列,查看表可以看到这时产生了两个索引
聚集索引是一个宝贵的资源,在一些表的中有时我们永远不会用到主键来作为查询条件,或者作为其他表的外键,这时主键的聚集索引
就显得大才小用了,我们希望将聚集索引建立在其他真正需要的字段,不过当我们执行删除操作时会报以下错误
消息 3723,级别 16,状态 4,第 1 行
不允许对索引 'MyTable.PK__MyTable__3213E83F145C0A3F' 显式地使用 DROP INDEX。该索引正用于 PRIMARY KEY 约束的强制执行
不过我们可以先删除主键约束,这样聚集所以就自动删除了
alter table MyTable drop constraint PK__MyTable__3213E83F145C0A3F
我们再看下聚集索引已经不存在了
当然唯一约束所引起的索引也可以同样的方式操作,先删除唯一约束
相关文章推荐
- 如何删除主键的聚集索引
- 添加和删除索引以及如何给中间表添加两个主键
- 如何删除表的主键定义和索引定义呢?
- 如何删除通过主键和唯一约束创建的索引
- 如何删除mysql 主键索引
- 如何删除通过主键和唯一约束创建的索引
- 删除unique key,删除原有的联合主键,新建新的联合逐渐,删除索引,修改索引,mysql5.7修改索引名称,查看最大连接数量,查看是否有ssl
- sql中创建主键非聚集索引和聚集索引
- 删除数据库的所有存储过程、主键、外键、索引等(转)
- 批量删除如何传给后台主键
- sql 优化之:聚集索引的重要性和如何选择聚集索引(系列五)
- mysql中如何查看和删除唯一索引
- MSSQL 如何删除字段的所有约束和索引
- 如何在oracle中查询所有用户表的表名、主键名称、索引、外键等
- 如何删除主键被引用的表的解决方法
- 聚集索引的重要性和如何选择聚集索引
- 删除表空间的时候遇到的问题:ORA-02429: 无法删除用于强制唯一/主键的索引
- sql中创建主键非聚集索引和聚集索引
- 解决ora-02429:无法用于删除强制唯一/主键的索引
- SQL存储原理及聚集索引、非聚集索引、唯一索引、主键约束的关系(补)