创建聚集索引、非聚集索引、唯一索引、唯一键约束
分析表的索引建立情况: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 ] 非聚集索引)