创建聚集索引、非聚集索引、唯一索引、唯一键约束

 分析表的索引建立情况:DBCC showcontig('Table') 

 执行重建索引命令:DBCC DBREINDEX('T_CEmployeeRegisterHoliday')

1、没有聚集索引查询

2、有聚集索引查询

3、没有非聚集索引查询

4、有非聚集索引查询

5、查询表索引语句

EXEC sp_helpindex A

6、删除索引语句
DROP index t_PortApply.PK_A1

7、除主键约束(聚集索引)语句
alter   table  A drop   constraint  PK_A1

8、显示执行时间

 declare @d datetime
 set @d=getdate() 

    select * from   @tmpTable
 select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate()) 

9、由于一个表只能有一个聚集索引,并且如果该表设置了主键,默认主键就是聚集索引。但由于主键列在查询条件中并没有频繁作为查询条件使用,这时候在主键上建立聚集索引就太浪费资源了,这种情况下我们可以删除主键约束,给主键建立唯一约束,保证主键列值没有重复值,删除主键约束后就可以在其他列上建立聚集索引。

10、如果表中已经建立了其他列为聚集索引,再在一个列上面创建主键时,这时候主键列只能是非聚集索引。

11、建立唯一键约束(默认非聚集索引,实际上唯一键约束是用唯一索引来约束的)两者的功能是一样的

    alter TABLE 表名 add  constraint   索引名称 unique(需要创建的列)

   ALTER TABLE AA add CONSTRAINT [IX_name] UNIQUE NONCLUSTERED([name] ASC) 

12、创建唯一索引( 唯一键 比 唯一索引 多了一种叫做 "unique key" 的约束)

   例句:CREATE unique index ix_RowID  on T_CEmployeeRegisterHoliday(RowID)

   例句:CREATE UNIQUE NONCLUSTERED INDEX [IX_UniqueIndex_name] ON [dbo].[TableUniqueIndex]([name] ASC)  

   a、不管是建立唯一索引还是唯一约束,被创建的列都不允许有重复数据,重复的NULL值也不可以

   b、创建唯一键约束,同时创建同名的唯一非聚集索引, 同时创建同名统计信息; 唯一键约束靠唯一索引来约束。

  

     c、唯一键约束的索引不能像正常的索引使用太多的索引参数,因为唯一键约束与其索引同在。而单独创建的唯一索引可以设置更多的参数

     d、那么我们在创建列的唯一性时,到底使用哪一种较好呢?(个人建议)

        唯一键约束在表中是必定存在的约束的,唯一键约束的索引存在于一个分区中,并且不会像索引那样可以更改。因为索引可以随时改动(当然也不会经常改动),索引 个人建议还是用唯一索引更灵活。管理约束还得管理索引,而管理索引,一个就好了。但是对于一些高可用性,也要注意索引是否在其他地方也存在。

       也可以这么理解,如果只是单独给一列检查唯一性,两者都可以,如果需要给2列或者更多列检查唯一性,则就用唯一索引。

13、创建索引的标准:用于频繁搜索的列;用于对数据进行排序的列

14、创建索引时如果不加索引关键字,默认就是创建非聚集索引(创建索引关键字[ UNIQUE ]唯一索引 [ CLUSTERED]聚集索引[NONCLUSTERED ] 非聚集索引)

原文地址:https://www.cnblogs.com/starts/p/5265546.html