数据库索引

数据库索引

数据库索引好比是一本书前面的目录,能加快数据库的查询速度。索引是对数据库表中一个或多个列的值进行排序的结构。如果想按特定职员的姓来查找,则与表中搜索所有的行相比,索引有助于更快地获取信息。

索引的优缺点

索引的优点

  1. 大大加快数据的检索速度
  2. 创建唯一性索引,保证数据库表中每一行数据的唯一性
  3. 加速表和表之间的连接
  4. 在使用分组和排序子句进行数据检查时,可以显著减少查询中分组和排序的时间。

索引的缺点

  1. 索引需要占物理空间
  2. 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。

索引的类型

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

普通索引

最基本的索引类型,没有唯一性之类的限制。

唯一索引

唯一索引是不允许其中在任何两行具有相同索引值的索引。

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

对某个列建立UNIQUE索引后,插入新纪录时,数据库管理系统会自动检查新纪录在该列上是否取了重复值,在CREATE TABLE命令中的UNIQUE约束将隐式创建UNIQUE索引。

主键索引

简称为主索引,数据库表中一列或列组合(字段)的值唯一表示表中的每一行。该列称为表的主键。

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

尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键索引。

候选索引

与主索引一样要求字段的唯一姓,并决定了处理记录的顺序,在数据库和自由表中,可以为每个表建立多个候选索引。

聚集索引

在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引,即如果存在聚集索引,就不能再指定CLUSTERED关键字

索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。聚集索引更适用于很少对基表进行增删改操作的形况。

非聚集索引

在非聚集索引中,数据库表中记录的物理顺序与索引顺序可以不相同。一个表中只能由一个聚集索引,但表中的每一列都可以有自己的非聚集索引。

操纵索引

创建索引

CREATE [UNIQUE][CLUSTERED|NONCLUSTERED] INDEX<索引名>
ON<表名>(<列名>[ASC|DESC],<列名>[ASC|DESC]...])
ALTER TABLE tablename ADD INDEX[索引的名字](列的列表);
CREATE TABLE tablename([...],INDEX[索引的名字](列的列表));

与表一样,索引也需要有唯一的名字,且基于一个表来建立,可以根据表中的一列或者多列,当列的顺序都是升序默认可不必标出,当属性列有按照降序排列时,所有属性的升序降序都不要标明。

  • UNIQUE——建立唯一索引。
  • CLUSTERED——建立聚集索引。
  • NONCLUSTERED——建立非聚集索引。
  • ASC——索引升序排序。
  • DESC——索引降序排序。

修改索引

对于已经建立的索引,如果需要对其重新命名,可以使用ALTER INDEX语句。其一般格式为

ALTER INDEX <旧索引的名字> RENAME TO <新索引名>

删除索引

当某个时期基本表中数据更新频繁或者某个索引不再需要时,需要删除部分索引。SQL语言使用DROP INDEX语句删除索引,其一般格式是:

DROP INDEX <索引名>

删除索引时,DBMS不仅在物理删除相关的索引数据,也会从数据字典删除有关该索引的描述。

索引的实现方式

B+树

B+树的特性:

  • 所有的数据都存储在叶子结点的链表中,且链表中的数据都是有序存放的;
  • 叶子结点间用指针相连;
  • 不可能在非叶子结点命中;
  • 非叶子结点相当于时叶子结点的索引,叶子结点相当于时存储数据的数据层;
  • 更适合文件索引系统;

B+树的性能:
等于在数据集合做一次二分查找;

与B数的区别:

  • B+数只有达到叶子结点才命中。
  • B-数可以在非叶子结点命中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值