数据库系列:索引总结

来源:互联网 发布:python数据挖掘 pdf 编辑:程序博客网 时间:2024/04/30 10:31
一、索引定义
索引,使用索引可加快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种存储结构
在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快。当表中有大量记录时,若要对表进行查询:
第一种搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作;
第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合 和 相应的指向存储在表的指定列中的数据值的指针,顺指针能找到包含该值的行。
索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。
二、索引的作用
(1)快速取数据;
(2)保证数据记录的唯一性;
(3)实现表与表之间的参照完整性;
(4)在使用ORDER by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间。
三、索引的优缺点
优点
1.大大加快数据的检索速度;
2.加速表和表之间的连接;
3.创建唯一性索引,保证数据库表中每一行数据的唯一性;
4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
缺点
1.索引需要占物理空间。
2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。
四、索引类型
根据数据库的功能,可以在数据库设计器中创建四种索引:普通索引、唯一索引、主键索引和聚集索引
普通索引
最基本的索引类型,没有唯一性之类的限制。普通索引可以通过以下几种方式创建:
创建索引,例如 CREATE INDEX <索引的名字> ON tablename (列的列表);
修改表, 例如 ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
ALTER INDEX <旧索引名>RENAME TO<新索引名>;
创建表的指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );
唯一索引
唯一索引是不允许其中任何两行具有相同索引值的索引
当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在 employee 表中职员的姓 (lname) 上创建了唯一索引,则任何两个员工都不能同姓。
对某个列建立UNIQUE索引后,插入新纪录时,数据库管理系统会自动检查新纪录在该列上是否取了重复值,在CREATE TABLE 命令中的UNIQE约束将隐式创建UNIQUE索引。
创建唯一索引的几种方式:
创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表, 例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
创建表的指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );
主键索引
数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。
在数据库关系图中为表定义主键将自动创建主键索引主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。
提示尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键索引。
聚集索引(聚簇索引)
聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同一个表只能包含一个聚集索引。 如果某

索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度聚集索引更适用于对很少对基表进行增删改操作的情况
五、关于索引的一些说明
索引的维护和使用:由DBMS自动完成维护和自动选择是否使用索引以及使用哪些索引。
创建索引SQL一般格式是:CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED] INDEX <索引名> ON <表名> ( <列名>[ASC|DESC] [, <列名>[ASC|DESC]...] )
UNIQUE—------------建立唯一索引
CLUSTERED——------建立聚集索引ASC——索引升序排序。
NONCLUSTERED——建立非聚集索引 DESC——索引降序排序。
说明:与表一样,索引也需要有唯一的名字,且基于一个表来建立,可以根据表中的一列或者多列,当列的顺序都是升序默认可不比标出,当属性列有按照降序排列的,所有属性的升序降序都不要标明。
删除索引:DROP INDEX<索引名>删除索引时,DBMS不仅在物理删除相关的索引数据,也会从数据字典删除有关该索引的描述
六、使用索引的一些建议
1.只有当经常查询索引列中的数据时,才需要在表上创建索引。
2.在较大表建立索引,表中的数据越多,索引的优越性越明显。
3.最好避免在单个表上有很多索引。
4.最好避免包含共享列的重叠索引。
5.确定索引的有效性:检查查询的 WHERE 和 JOIN 子句。在任一子句中包括的每一列都是索引可以选择的对象
6.检查某列中唯一数据值的数量,并将该数量与表中的行数进行比较。比较的结果就是该列的可选择性,这有助于确定该列是否适合建立索引,如果适合,确定索引的类型

参考资料:1. 周屹 李艳娟.数据库原理及开发应用(第二版):清华大学出版社,2013:90
2. 王珊 萨师煊.数据库系统概率(第5版):高等教育出版社,2014:88-89




1 0