sqlserver数据库索引创建 使用 重建 索引碎片
1、索引介绍
1)聚集索引:一张表只能有一个聚集索引,通常表主键就默认是聚集索引,也可以设置非主键列为聚集索引,设置聚集索引后,数据存储将按照索引列有规则的排列
2)非聚集索引:一张表可以有多个非聚集索引,物理数据存储不会强制按照非聚集索引排列
3)一个索引最多有16个索引列,一张表最好不要超过5个索引
4)每当表数据变化(增、删、改)的时候,每个索引都需要按照规则更新索引位置

2、新建一张不带主键的表
使用如下的SQL语句,创建一张测试的不带主键的表:
CREATE TABLE IndexTable(
Id varchar(36) NOT NULL,
IndexCol1 varchar(50) NULL,
IndexCol2 varchar(50) NULL,
IndexCol3 varchar(50) NULL
)


3、设置主键,查看聚集索引
1)使用sql语句设置Id列为主键:alter table IndexTable add constraint pk_Id primary key(Id);
2)设置完主键后,默认就将主键列设置为了聚集索引


4、设置非聚集索引
使用sql语句设置列IndexCol1为非聚集索引:create nonclustered index non_index_col1 on IndexTable(IndexCol1);


5、插入测试数据
使用sql语句插入5行记录

6、删除部分测试数据
使用sql语句删除第2和第4行记录:delete from IndexTable where IndexCol1 = '第2行第1列' or IndexCol1 = '第4行第1列';

7、查看索引碎片比例
使用sql语句命令 DBCC showcontig('IndexTable'); 即可查看索引的碎片率,当碎片率比较高的时候,就可以重建索引了

8、重建索引
1)建立索引后,删除数据库时,索引行位置也会删除,但是索引中这里就会留下空白,后面的数据也不会占用这个位置,久而久之,索引里面就会有很多的空白,称为索引碎片,此时需要通过重建索引来消除索引碎片
2)使用sql语句命令重建索引:DBCC DBREINDEX('IndexTable');
