35. SQL -- 聚集索引和非聚集索引(1)

索引概述:

 

户对数据繁的操作是行数据查询。一般情况下,数据查询操作需要整个表行数据搜索。当表中的数据很多,搜索数据就需要很时间就造成了服器的源浪了提高索数据的能力,数据引入了索引机制。数据索引好比是一本前面的目,能加快数据查询速度。

 

例如这样一个查询

select * from table1 where id=44

如果没有索引,必整个表,直到ID 等于44 一行被找到止;有了索引之后(是在ID 一列上建立的索引),直接在索引里面找44(也就是在ID 一列找),就可以得知一行的位置,也就是找到了一行。可,索引是用来定位的。

 

索引的定义:

索引是一个独的、物理的数据库结构,是数据的一个象,它是某个表中一列或若干列的集合,和相的指向表中物理标识这的数据逻辑。索引是依于表建立的,它提供了数据排表中数据的内部方法。一个表的存是由两部分成的,一部分用来存放表的数据面,另一部分存放索引面。索引就存放在索引面上,通常,索引面相于数据面来小得多。

 

建立索引的优缺点:

点:

建索引可以大大提高系的性能。

过创建唯一性索引,可以保数据表中一行数据的唯一性。

可以大大加快数据的索速度,也是建索引的最主要的原因。

可以加速表和表之接,特是在实现数据的参考完整性方面特有意

在使用分和排序子句行数据,同可以著减少查询中分和排序的时间

使用索引,可以在查询程中,使用藏器,提高系的性能。

 

缺点:

建索引和维护索引要耗费时间这种时间随着数据量的增加而增加。

索引需要占物理空,除了数据表占数据空之外,一个索引要占一定的物理空,如果要建立聚簇索引,那需要的空就会更大。

表中的数据行增加、除和修改的候,索引也要动态维护这样就降低了数据的维护速度。

 

需创建索引的列的特点:

当列足以下特性应创建索引:

常需要搜索的列上,可以加快搜索的速度;

在作的列上,列的唯一性和组织表中数据的排列构;

常用在接的列上,些列主要是一些外,可以加快接的速度;

常需要根据范围进行搜索的列上建索引,因索引已排序,其指定的范连续的;

常需要排序的列上建索引,因索引已排序,这样查询可以利用索引的排序,加快排序查询时间

常使用在WHERE 子句中的列上面建索引,加快条件的判断速度。

 

不应创建索引的列的特点:

当列有以下特性,不应创建索引:

于那些在查询中很少使用或者参考的列不应该创建索引。是因,既然些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系维护速度和增大了空需求。

于那些只有很少数据的列也不应该增加索引。是因,由于些列的取很少,例如人事表的性列,在查询果中,果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明加快索速度。

于那些定义为text, image bit 数据型的列不应该增加索引。是因些列的数据量要相当大,要很少,不利于使用索引。

当修改性能远远大于索性能,不应该创建索引。是因,修改性能和索性能是互相矛盾的。当增加索引,会提高索性能,但是会降低修改性能。当减少索引,会提高修改性能,降低索性能。因此,当修改操作远远多于索操作,不应该创建索引。

 

索引的特性:

索引加快了表查询的速度,以及完成排序、分的速度。

索引可以用于施行的唯一性。

索引适用于大部分数据都是唯一的那些列。在包含大量重复值的列上建立索引是无用的。

当你修改一个索引列的数据,相索引将自更新。

维护索引需要时间源。你不应该创建一个利用率很底的索引。

聚集索引建于非聚集索引建之前。聚集索引改行的次序,如果非聚集索引建于聚集索引之前,它将被重新构建。

通常,非聚集索引建在外关键字之上。

 

索引的结构:

索引使用B-树结(BalancedTree 平衡)

SQL Server 中的索引是以B-树结构来维护的。B-是一个多次、自维护构。一个B-包括一个顶层,称点(Root Node);0 到多个中间层Intermediate);一个底Level 0),底中包括若干叶子点(Leaf Node)。

 

索引的分

索引分聚簇索引和非聚簇索引两

聚簇索引Cluster Index:是按照数据存放的物理位置为顺序的,提高多行索的速度

非聚簇索引None-Cluster Index):行的索很快。

 

聚集索引:

SQL 查询时,有2 方式:一是索引描;二是表描。

描:SQL 查询时取表中所有

索引描:SQL 查询时,使用索引描,先取索引,根据索引来找数据实际所在.每张表只能建一个聚集索引,聚集索引把数据在物理上被排序。一般建在不常被修改的属性上。若索引项经常被修改,会造成数据查询有影响。

 

聚集索引在查询时,使用索引扫描。

聚集索引工作原理:

聚集索引把数据在物理上被排序。每张表中只能建一个聚集索引,所以,你要将其建在唯一百分比最高、且不常被修改的属性上。当SQL Server使用聚集索引搜索某个值时,遵循下列步骤

SQL Server从表sysindexes 得根的地址。

将搜索和根中的关键值进行比

找到包含小于或等于搜索的最大关键的那一

下到索引的下一

复步骤c d ,直到到达数据

在数据上搜索数据行,直到找到搜索值为止。如果没有在数据上找到搜索则查询不返回任何行。

 

非聚集索引:

若有聚集索引,非聚集索引的指向是聚集索引的某个面数据.它通常建在用于接、WHERE 子句和其值频繁修改的列上非聚集索引具有与表的数据完全分离的构,使用非聚集索引不用将物理数据中的数据按列排序。

表的数据行只能以一排序方式存在磁上,所以一个表只能有一个聚集索引。一个表最多可以建249 个非聚集索引

 

非聚集索引工作原理:

非聚集索引行的物理序和索引序不同。它通常建在用于接、WHERE 子句和其值频繁修改的列上。当SQL Server 使用非聚集索引搜索值时,遵循以下步骤

SQL Serversysindexes 表中取根的地址。

将搜索和根中的关键

找到小于或等于搜索的最大关键所在的

下到索引的下一

复步骤c d,直到到达数据

搜索叶上的行以找指定。若未找到匹配的则说明表中不包含匹配行。

若找到了匹配行,下到数据及表中的行号(Eid),从而索到了所需的行。

 


本文出自 “Ricky's Blog” 博客,请务必保留此出处http://57388.blog.51cto.com/47388/1628993

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。