首页 > 编程知识 正文

数据库索引的数据结构,数据库的存储结构

时间:2023-05-04 21:34:50 阅读:33680 作者:877

1 .存储引擎数据结构

1. B树(B-树)。

b树是2-3树的扩展,对m下一个b树来说如下。

(1)根节点至少有两个子节点

)每个节点最多有M-1个密钥,按升序排列,并有Nk 1个指针。 其中,Nk表示密钥的数量。

)3)对于一个key1,左侧指针指向的子节点的key值=key1,右侧子指针指向的子节点的key值key1) (见下图)。

)4)其他节点至少有M/2个子节点

以下博客详细介绍了在b树中插入节点的过程:

他的插入过程和红黑树很相似。 总结如下。

)1)插入新值时,首先根据第三条原则找到他在叶节点的位置并插入

)2)当前叶节点的key数等于m时,使所有key通过一个中间值(例如,M=4为第二个数,M=5为第三个数),分为相同的两部分(m为偶数则为一个不同),将中间数作为母节点

2. B树

存储引擎常用的数据结构、多个交叉平衡搜索树和特征:

(1)除叶节点以外的所有节点都具有m个密钥和指向m个子节点的指针。

)2)所有的叶节点都在同一层次上

)非叶节点的部分树指针和关键字(Key )的个数相同;

)属于非叶节点部分树指针P[i]、关键值[K[i]、K[i 1]的部分树(B-树是开区间);

)5)在所有叶子的节点上添加链指针

(6)所有关键词) key )出现在叶节点上; 因此,所有搜索都只在叶节点上命中

结构如下图所示。

与b树的优点相比:

)1)搜索支持范围

)2)横移更方便

)3)节省空间)因为在b树中只有叶节点保存数据,所以内部节点不需要只指向关键字的具体信息的指针。

)4)所有查询操作都需要命中子节点,因此相同。

PS: B*树除了b树之外,还向叶以外的节点添加了链表指针

微软引擎

不支持事务

支持表级锁定。 (MySql支持两种表级锁定,表共享读锁定和表独占写锁定。 )不支持低电平锁定

存储表的总行数

MyISAM表包含三个文件:索引文件. MYI、表结构文件. frm和数据文件. MYD

使用非聚集索引:索引文件和数据文件是分开的,索引文件的数据域包含指向数据文件的指针

跨平台APP更方便(表格以文件格式存储) )。

支持三种类型的存储格式:

)1)静态表)存储快速、易于缓存、在出现故障时易于恢复,但由于用列宽填充空间,因此占用了大量内存

)2)动态表)占用空间少,但频繁更新和删除容易碎片化,需要定期整理,且出现故障也不易恢复。

)3)压缩表:占用的磁盘空间非常小(因为每个记录都是单独压缩的,所以访问成本很低)。

InnoDb引擎

事务支持

行级锁定支持:仅当条件语句包含主键索引时)

内存利用率低

查询效率和写入效率差

在聚集索引中,索引和数据一起存在,数据直接存储在叶的节点中。

外键支持

注:由于MyISAM使用与主键索引相似的次索引,因此在使用次索引搜索数据时,只需使用次索引树即可进行搜索,而InnoDB使用主索引树

四. MEMORY

与一个磁盘文件. frm相对应,保存表结构

访问速度非常快。 他的数据存在于内存中,但服务停止时数据会丢失

可以指定散列索引或BTREE索引

默认存储数据大小不超过16MB,但可以调整

应用场景:例如作为统计操作的中间结果表,便于有效分析中间结果,得到最终结果。

五.合并

MyISAM表的组合。 这些MyISAM表的结构必须完全相同

对MERGE表的操作实际上是对其子表执行的

通过指定INSERT_METHOD=LAST,可以创建用于插入数据的表。 在此指定最后一个表

参考:

[1] 《深入浅出MySQL》

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。