数据库的索引是什么?为何需要它?如何使用它?

what

一种类似于书籍目录的东西,当有了目录,你寻找特定章节,就比较快。索引也是这种作用的东西。

对于书籍,你对章节建立了索引,很好找到章节。对于数据库的记录,你或许为记录的ID建立索引。

一个具体些的例子是:你有个用户数据库,那么你为用户的名字建立了索引,那么你就有个目录,此目录里从Aaron排列用户的名字,直到Zark。 当你寻找 Paul 那么聪明的你,将知道按照顺序,翻页到目录的中部,因为 P 处于 A 和 Z 的中间,然后你再 找 Paul 这个关键字

why

当我们提起 索引的定义,那么我们也就知道, why 我们使用索引了

因为 索引 让我们的数据检索速度变快了

how

首先理解索引作用的对象

如果你为所有用户的身份证号建立索引,那么可以说这种索引是 唯一索引, 因为它对对应的数据(身份证号)是不重复的,每人一个

如果你为用户的名字建立索引,那么这种索引就是 普通索引,因为用户的名字可能重复

你可以为 身份证号和名字 一同建立索引,尽管这看起来有些奇怪,就像没有人会在一本书里建立 章节和此章引用的文献时间 的目录,人们通常会看到 仅关于章节 的目录。但是存在这种组合起来的索引,而且有时它确实非常有用,这就是 组合索引

建立一个索引

最简单来说,通过 key 关键字,你就是在声明一个索引,如下

create table People {
    lastname varchar(50) not null,
    firstname varchar(50) not null,
    birthday date not null,
    gender enum('m', 'f') not null,
    key(lastname), # 一个普通索引
    key(lastname, firstname, birthday) # 一个组合索引
};

索引是如何实现呢?

MySQL 中的索引实现有:B+树,哈希索引,全文索引,R树索引等。

这些都是有关数据结构的内容,在深入之前,我先简单阐述一下

  • B+树是一种多路搜索树,它是B树的一种变体,广泛用于数据库索引;
  • 哈希索引是将索引键值映射到一个地址,以快速查询索引;
  • 全文索引可以提供对文本字段的全文搜索功能;
  • R树索引是一种多维数据索引,用于空间数据库中的数据检索。

经典的索引方式:B+树

当人们讨论索引时,不出意外,他们一定都在针对 B+ 树这种实现,来说明关于索引的一切

大多数存储引擎都支持 B+ 树的索引方式

因为它对磁盘的IO很友好,仅需要通过3次IO能找寻出百万记录的某个记录,这是令人满意的效率

如果你对其样貌好奇,这里是 维基百科 的图示,

2023-02-14-09-32-40

以及我画的 一个 针对数据库索引的 B+ 树,我们会在后续的文章具体讲解数据库里的 B+ 树

2023-02-14-09-33-36

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值