Snowfun

导航

 

 

 

优点:

l索引的目的是提高SQL Server系统的性能,加快数据的查询速度和减少系统的响应时间。
l索引还可以使表和表之间的连接速度加快。例如可以将表的外键制作成索引,可加速表之间的连接。
l索引与目录类似,通过目录中章节的页号找到对应的内容,索引通过记录表中的关键值指向表中的记录,这样数据库引擎就不用扫描整个表而定位到相关的记录。

缺点:

l创建索引和维护索引都会消耗时间,当对表中的数据进行增加、删除和修改操作时,索引就要进行维护,否则索引的作用就会下降;
l每个索引都会占用一定的物理空间,如果占用的物理空间过多,就会影响到整个SQL Server系统的性能。
 

建立索引的原则:

l定义有主键的数据列一定要建立索引。因为主键可以加速定位到表中的某一行。
l定义有外键的数据列一定要建立索引。外键列通常用于表与表之间的连接,在其上创建索引可以加快表间的连接。
l对于经常查询的数据列最好建立索引。
l对于查询中很少涉及的列、重复值比较多的列不要建立索引。例如性别列,增加索引并不能显著提高查询的速度,相反增加系统维护时间和消耗系统空间。
 

索引类型:聚集索引、非聚集索引和唯一索引。

l聚集索引:会对表和视图进行物理排序,此索引对查询非常有效,在表和视图中只能有一个聚集索引。当建立主键约束时,如果表中没有聚集索引,SQL Server会用主键列作为聚集索引键。只要列中的数据是唯一的,就可以在同一个表上创建聚集索引。
l非聚集索引:不会对表和视图进行物理排序。
l唯一索引:不允许两行具有相同的索引值。例如表中的“姓名”字段创建了唯一索引,则 以后输入的姓名将不能同名。

注意:

l如果必须实施唯一性以确保数据的完整性,则应在列上创建唯一约束或主键约束,而不要创建唯一索引。
l创建主键约束或唯一约束会在表中指定的列上自动创建唯一索引。
l创建唯一约束与手动创建唯一索引没有明显的区别。
 

创建索引语法:

create  unique | clustered | nonclustered   

index  index_name

On  table_name|view_name(字段)

 

例子:

CREATE  nonclustered index  IDX_oscm_pro_out ON [dbo].[oscm_pro_out] ( [sheet_no],[sheet_sta] ASC)

 

利用 DBCC SHOWCONTIG获取数据库中表Com_CardInfo的索引PK_Com_CardInfo碎片信息

dbcc showcontig(Com_CardInfo,PK_Com_CardInfo)

注意扫描密度,其理想值为100%,如果比较低,就需要清理表上的碎片

 

使用dbcc indexdefrag语句进行碎片整理

当表或视图上的聚集索引和非聚集索引页级上存在碎片时,可以通过此命令对其进行碎片整理。

dbcc indexdefrag(tetdb,Com_CardInfo,PK_Com_CardInfo)

 

 

 

 

1.11.1 简介

汉语字典中的汉字按页存放,一般都有汉语拼音目录(索引)、偏旁部首目录等。

我们可以根据拼音或偏旁部首,快速查找某个字词。

SQLServer中的数据也是按页(4kb)存放的。

索引:是SQLServer编排数据的内部方法,它为SQLServer提供一种方法来编排查询的数据。

索引页:数据库存放的数据页,索引页类似于汉语字典中按拼音或笔画排序的目录页。

索引的作用:通过使用索引,可以大大提高数据库的检索速度,改善数据库性能。

 

1.11.2 类型

唯一索引:唯一索引不允许两行具有相同的索引值。

主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一的特殊类型,主键索引要求主键中的每个值是唯一的,并且不能为空。

聚焦索引(clustered):表中各行的物理顺序与健值的逻辑(索引)顺序相同,每个表只能有一个。

非聚焦索引(non-clustered):非聚焦索引指定表的逻辑顺序,数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针,可以有多个,小于249个。

 

posted on 2015-11-12 09:57  Snowfun  阅读(190)  评论(0)    收藏  举报