从我的网易博客移动。。。。。
SQL SERVER 如果在建表的时候建立了主键,没有建立聚簇索引,那么久默认了主键是聚簇索引。坑爹啊。这样,这么重要的聚簇索引就到了主键上了。要修改麻烦死了。。
研究了半天,发现有两种方法:
首先说下我建立的表:
订单详情 T_DetailOrder
字段名称 | 说明 | 数据类型 | 主键 |
DO_ID | 主键 | Bigint | 是 |
O_ID | 订单号 | Bigint |
|
Mname | 菜名 | Nvarchar(20) |
|
Mprice | 价格 | Float |
|
|
|
|
|
为订单详情做O_ID的聚簇索引。
第一种建聚簇索引的方法:
删除表后重新建立表:
直接在建立的时候建立聚簇索引
create table T_DetailOrder ( DO_ID Bigint identity, O_ID Bigint, Mname Nvarchar(20), Mpirce float, primary key nonclustered (DO_ID), unique clustered (O_ID) )
第二种方法:
由于有主键,默认主键为聚簇索引,删除主键上的聚簇索引失败。只有先删除主键,再建立主键,然后建立聚簇索引。
获得表的主键 :exec sp_pkeys T_DetailOrder,得到主键为PK_T_DetailOrder
删除主键:alter table T_DetailOrder DROP CONSTRAINT PK_T_DetailOrder
建立主键和聚簇索引:
Alter table T_DetailOrder add CONSTRAINT PK_T_DetailOrder PRIMARY KEY nonclustered (DO_ID)
create clustered index O_IDindex on T_DetailOrder(O_ID)
这样,就建立好O_ID的索引了。。坑爹的SQL SERVER 。。。。