数据库-聚簇索引和非聚簇索引

来源:互联网 发布:安逸花提现软件 编辑:程序博客网 时间:2024/06/07 09:39
聚簇索引和非聚簇索引


聚簇是个什么东西?
聚簇是指:如果一组表有一些共同的列,则将这样一组表存储在相同的数据库块中;聚簇还表示把相关的数据存储在同一个块上。利用聚簇,一个块可能包含多个表的数据。概念上就是如果两个或多个表经常做链接操作,那么可以把需要的数据预先存储在一起。聚簇还可以用于单个表,可以按某个列将数据分组存储。更加简单的说,比如说,EMP表和DEPT表,这两个表存储在不同的segment中,甚至有可能存储在不同的TABLESPACE中,因此,他们的数据一定不会在同一个BLOCK里。而我们有会经常对这两个表做关联查询,比如说:select * from emp,dept where emp.deptno = dept.deptno .仔细想想,查询主要是对BLOCK的操作,查询的BLOCK越多,系统IO就消耗越大。如果我把这两个表的数据聚集在少量的BLOCK里,查询效率一定会提高不少。 比如我现在将值deptno=10的所有员工抽取出来,并且把对应的部门信息也存储在这个BLOCK里(如果存不下了,可以为原来的块串联另外的块)。这就是索引聚簇表的工作原理。


聚簇索引和非聚簇索引的差异性:
在聚簇索引中,索引树的叶级页包含实际的数据:记录的索引顺序与物理顺序相同。聚簇索引非常象目录表,目录表的顺序与实际的页码顺序是一致的。
在非聚簇索引中,叶级页指向表中的记录:记录的物理顺序与逻辑顺序没有必然的联系。非聚簇索引则更象书的标准索引表,索引表中的顺序通常与实际的页码顺序是不一致的。一本书也许有多个索引。例如,它也许同时有主题索引和作者索引。同样,一个表可以有多个非聚簇索引。 


聚簇索引和非聚簇索引的优缺点:
通常情况下,使用的是聚簇索引。 
每个表只能有一个聚簇索引,因为一个表中的记录只能以一种物理顺序存放
通常要对一个表按照标识字段建立聚簇索引。但是,也可以对其它类型的字段建立聚簇索引,如字符型,数值型和日期时间型字段。 
可以对一个表同时建立聚簇索引和非聚簇索引
非聚簇索引需要大量的硬盘空间和内存。
非聚簇索引可以提高从表中取数据的速度,它也会降低向表中插入和更新数据的速度。每当你改变了一个建立了非聚簇索引的表中的数据时,必须同时更新索引。
因此你对一个表建立非聚簇索引时要慎重考虑。如果你预计一个表需要频繁地更新数据,那么不要对它建立太多非聚簇索引。
如果硬盘和内存空间有限,也应该限制使用非聚簇索引的数量。 
 
 
聚簇索引和非聚簇索引的属性:
   两种类型的索引都可以同时对多个字段建立索引:可以对多个字段建立一个复合索引,甚至是复合的聚簇索引。假如有一个表记录了网点访问者的姓和名字。如果希望根据完整姓名从表中取数据,你需要建立一个同时对姓字段和名字字段进行的索引。这和分别对两个字段建立单独的索引是不同的。当希望同时对不止一个字段进行查询时,应该建立一个对多个字段的索引。如果希望对各个字段进行分别查询,应该对各字段建立独立的索引。
   两种类型的索引都可以指定为唯一索引:两种类型的索引都可以被指定为唯一索引。如果对一个字段建立了唯一索引,将不能向这个字段输入重复的值。一个标识字段会自动成为唯一值字段,但也可以对其它类型的字段建立唯一索引。假设用一个表来保存你的网点的用户密码,当然不希望两个用户有相同的密码。通过强制一个字段成为唯一值字段,可以防止这种情况的发生。
 
0 0
原创粉丝点击