数据库索引

一、索引的优势

1.在设计数据库时,通过创建一个唯一的索引,能够在索引和信息之间形成一对一的映射式的对应关系,增加数据的唯一性的特点。
2.能提高数据的搜索及检索速度,符合数据库建立的初衷
3.在信息检索过程中,若使用分组及排序子句进行时,通过建立索引,能有效的减少检索过程中所需的分组及排序时间,提高检索效率。

二、索引的缺点

1.在数据库建立过程中,需花费较多的时间去建立并维护索引,特别是随着数据总量的增加,所花费的时间将不断递增。
2.在数据库中创建的索引需要占据一定的物力存储空间,这其中就包含数据表所占的数据空间以及所创建的每一个索引的物力空间。
3.在对表的数据进行修改时,例如对其进行增加、删除或者是修改操作时,索引还需进行动态的维护,这给数据库的维护速度带来了一定的麻烦。

三、索引的类型

根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引

1)唯一索引

唯一索引是不允许其中任何两行具有相同索引值的索引。当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加在表中创建重复键值的新数据。例如,如果在employee表中职员姓(lname)创建了唯一索引,则任何两个员工都不可能同姓。

2)主键索引

数据库中经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

PS:唯一索引不一定是主键索引,主键索引一定包含一个唯一索引。具体的差别是:
1.主键索引在声明主键的时候自动产生,唯一索引需要自己声明。
2.主键索引不允许null,唯一索引允许。
3.主键索引每个表只能有一个,唯一索引可以多个

以下内容很关键
唯一索引对相等查询的效率提高是最大的。
但对于delete和update性能也会有提高。虽然索引的存在增加了维护索引的开销,导致会使得update和delete,insert的成本稍有增加,但是由于在delete和update时可以通过唯一索引删除指定内容,从而避免可能出现的全表扫描,所以,在特定环境下,唯一索引会极大程度上提高查询,insert,delete和update的性能。

3) 聚簇索引

在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。
聚集索引和非聚集索引的举例:
如字典默认按字母顺序排序,读者如果知道某个字的读音可根据字母顺序快速定位,因此聚集索引和表的内容是在一起的;
如读者需查询某个生僻字,则需按字典前面的索引进行查找。举例按偏旁进行定位,找到该字对应的页数,在打开对应页数找到该字。这种通过两个地方而查询到某个字的方式就如非聚集索引。

四、聚簇索引和非聚簇索引

聚簇索引和非聚簇索引是索引的两种存储方式。
聚簇索引指的是:索引按照主键的大小顺序排列。
聚簇索引图示如下:

数据库索引_第1张图片
实现过程是:如果是直接用主键索引来查找,则可以直接查找到数据,如果是用主键之外的辅助键来查找,则先会找到主键的id,再通过id查找主键获得数据。
聚簇索引的特点是有序,因此,频繁的增删改查会大幅度修改其余索引,因此聚簇索引应尽可能挑选修改少的字段或者是范围有序的字段而不是数据本身有序。

非聚簇索引指的是在索引无序的情况下进行的索引,打个比方,聚簇索引是通过拼音找到一个字,因为拼音本身就是有序的(a~z);但如果通过偏旁来找,那就是无序的,需要先找到偏旁,再找到笔画,最后找到字,这样的多层索引就是非聚簇索引,图示如下

数据库索引_第2张图片
非聚簇索引就是通过增加物理空间,实现了查找的高效。

你可能感兴趣的:(数据库,数据库)