数据库—索引优化、B-Tree、B+Tree、Hash、BitMap

如何设计一个关系型数据库?

数据库—索引优化、B-Tree、B+Tree、Hash、BitMap_第1张图片

两大部分

存储(文件系统(机械硬盘,固态硬盘))

程序实例

 

程序实例分为8个模块:

1.存储管理模块:将数据的逻辑关系转换为物理存储关系

2.缓存机制模块(内存来进行):优化执行效率

3.SQL解析模块:解析SQL语句

4.日志管理模块:记录操作(分库这些)

5.权限划分模块:进行多用户管理(比如老板能看多所有员工信息,但是员工只能看到自己该看到的东西)

6.容灾机制模块:灾难恢复(异常、服务器崩溃)

7.索引管理模块:优化数据库查询

8.锁管理模块:使得数据库支持并发操作

 

为什么要使用索引

先说全表扫描:

存储的最小单位是块或页,是由多行记录组成的。(整个表就是多个块或页)我们把这些块或者页加载进去,然后每个块或者页去轮询,找到目标并返回(适用与数据比较小的)

 

索引灵感来自字典,查字典可以通过部首,拼音,查数据可以通过主键、唯一键以及普通键(我们通常说的关键字)

除此之外,我们还要将这些关键字以一种好的形式组织起来,即索引的数据结构。像是建立二叉树进行二分查找。建立B-Tree结构,B+Tree结构、Hash结构
 

索引模块

主要用的是 B+ Tree数据结构 树

数据库—索引优化、B-Tree、B+Tree、Hash、BitMap_第2张图片

 

 

 

 

二叉查找树的弊端

再添加元素 它很容易转变为线性数据结构

数据库—索引优化、B-Tree、B+Tree、Hash、BitMap_第3张图片

 

B Tree树

这个树 我感觉有点像 2-3数

数据库—索引优化、B-Tree、B+Tree、Hash、BitMap_第4张图片

 

它的定义

ceil取得最大上限,比如3/2=1.5 但是这里要取2 往上取整

数据库—索引优化、B-Tree、B+Tree、Hash、BitMap_第5张图片

 

 

B+ Tree

B+树是B树的变体,其定义基本与B树相同,除了:

非叶子节点的子树指针与关键字个数相同

非叶子节点的子树指针P[i],指向关键字值[K[i],K[i+1]]的子树

非叶子节点仅用来索引,数据都保存在叶子节点中

所有叶子节点均有一个链指向下一个叶子节点

B+ Tree更适合用来做存储索引

B+树的磁盘读写代价更低

B+树的查询效率更加稳定

B+树更有利于对数据库的扫描

数据库—索引优化、B-Tree、B+Tree、Hash、BitMap_第6张图片

 

Hash表也可以考虑一下

直接查找key 键值就好

Hash缺点

1.只满足=,IN 不能范围查询 只你能根据key来进行查找

2.不能利用部分索引键做查询

3.不能被用来避免数据的排序(因为hash索引中存放的是hash运算之后的值,hash值大小关系不一定和运算前的键值完全一样[不同key可能相同hash(key)],数据库无法利用索引的数据来避免任何排序运算)

4.不能避免表扫描([不同key可能相同hash(key)]),也就是说索引可能对应多个记录,这些记录表需要进行扫描

5.遇到大量Hash值相等的情况后性能不一定比B-Tree索引高(极端情况所有key都对应同一个Hash(key)变成线性的了)

数据库—索引优化、B-Tree、B+Tree、Hash、BitMap_第7张图片

 

 

BitMap

支持位图索引的数据库比较少

知名的就有oracle

数据库—索引优化、B-Tree、B+Tree、Hash、BitMap_第8张图片

 

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