索引
索引
笨拙的小Q 发表于2年前
索引
  • 发表于 2年前
  • 阅读 29
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

1、聚集索引:又称为主索引,即表记录的排列顺序与索引的排列顺序一致。

优点是:查询速度快,因为一旦第一个索引值的记录被找到,具有连续索引值的记录物理上也一定是连续的,顺序查找即可找到。

缺点是:对表进行修改速度慢,这是因为为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排。因此速度比较慢。

建议使用聚集索引的场合为:
a.此列包含有限数目的不同值;
b.查询的结果返回一个区间的值;
c.查询的结果返回某值相同的大量结果集。
 

2、非聚集索引(辅助索引):它指定了表中的逻辑顺序,但记录的物理顺序与索引的顺序不一致。

优点:提高了查询性能;缺点:显著增加了数据库的更新开销。

建议使用非聚集索引的场合为:
a.此列包含了大量数目不同的值;
b.查询的结束返回的是少量的结果集;
c.order by 子句中使用了该列。
 

3、聚集索引和非聚集索引的区别与联系

       聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。非聚集索引比聚集索引层次多,添加记录不会引起数据顺序的重组。

       表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键.(默认为聚集索引)。聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。

       非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。

      《数据库原理》里面的解释:聚集索引的顺序就是数据的物理存储顺序,而非聚集索引的顺序和数据物理排列无关。因为数据在物理存放时只能有一种排列方式,所以一个表只能有一个聚集索引。

       在SQL SERVER中,索引是通过二叉树的数据结构来描述的;我们可以如此理解这个两种索引:聚集索引的叶节点就是数据节点,而非聚集索引的叶节点仍然是索引节点,只不过其包含一个指向对应数据块的指针。聚集索引会降低   insert,delete和update操作的性能,所以,是否使用聚集索引要全面衡量。 

3、数据库索引是建立在数据库表中的某些列上,适合创建索引的情况如下:

(1)、在经常需要搜索的列上,可以加快搜索的速度;

(2)、在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;

(3)、在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;

(4)、在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;

(5)、在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;

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

不适合创建索引的列具有如下的特点:

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

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

第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。

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

 

 

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 1
博文 30
码字总数 27842
×
笨拙的小Q
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: