默认情况下,生成主键的同时将自动创建一个聚集索引。
2、使用T-SQL创建聚集索引
create clustered index index_name /*聚集索引名*/ on table_name ( id desc ) with(drop_existing=on); /*如果存在则删除*/
每张表或者视图只能包含一个聚集索引,因为聚集索引改变了数据存储与排列方式。
无论是聚集还是非聚集索引,都将信息存储在平衡树或B-树中,B-树识别类似数据并将他们组合在一起,正是由于B-树中的检索基于键值,因此索引可以提升数据访问的速度。B-树将具有类似键的组合起来,所以数据库引擎只需搜索少量页面即可找到目标记录。
四、非聚集索引
每张表上可以有多个非聚集索引,可以在某个列上创建一个索引,也可以在已经是现有索引组成部分的多列上创建索引。
1、SSMS创建方法同上,T-SQL创建方法如下:
create nonclustered index fei /*聚集索引名*/ on defualt ( hits desc )
2、添加索引选项
fillfactor:用于在创建索引时,每个索引页的数据占索引大小的百分比,默认100.当需要频繁修改表时,建议设置为70-80,不经常更新时建议90。
五、示例
create table ceshi --新建表 ( id int identity(1,1) primary key, name varchar(20), code varchar(20), [date] datetime ) --插入10w条测试数据 declare @n int set @n = 1 while @n <100000 begin insert into ceshi (name,code,[date]) values ('name'+cast(@n as varchar(20)),'code'+cast(@n as varchar(20)),getutcdate()) set @n=@n+1 end --查看数据 set statistics io on --查看磁盘io set statistics time on --查看sql语句分析编译和执行时间 select * from ceshi --查看索引情况 exec sp_helpindex ceshi select * from ceshi where name = 'name1'
ctrl+l 查看执行计划 聚集索引扫描开销100%,考虑优化为索引查找,在name上建立非聚集索引。
--建立非聚集索引 create index name_index on ceshi ( name ) --再次查看索引情况 多出来新建的非聚集索引 exec sp_helpindex ceshi --在运行上面的语句 select * from ceshi where name = 'name1' --明显发现速度变快了 , ctrl+l 发现聚集索引和非聚集索引各占50%
六、管理索引
--查看该表中的索引 exec sp_helpindex ceshi --改名 exec sp_rename 'ceshi.name_index','new_name' --删除索引 drop index ceshi.new_name --检查碎片 dbcc showcontig(ceshi,new_name) --整理碎片 dbcc indexdefrag(webDB,ceshi,new_name) --更新表中所有索引的统计 update statistics ceshi
到此这篇关于SQL Server索引的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
更多SQL内容来自木庄网络博客