当前位置: 首页 > >

Mysql底层存储引擎

发布时间:

1.单值索引
1.索引

1.存储引擎是建立在表级别的。


2.索引是存储在磁盘中的。


3.B+树比B树的优点:


? ? 在高度相等的情况下,B+树比B树存储的数据更多,因为每个点最大是16k


? ? 用B+树存储而不用Hash存储的原因是:大部分数据查找的时候都不是等值查找。


? ? B+数存储的底层数据叶子节点是双向指针,非叶子节点是冗余索引,冗余索引没有数据



B数底层叶子节点是没有指针的,也没有冗余索引,非叶子节点要存储数据



在navicat中新建表的时候从“字段”移到选项上可以选择存储引擎。



MyISAM存储引擎(非聚集索引:数据和索引不放在一个文件里)

优点:可被压缩,节省空间,可以转化为只读表,提高检索效率


缺点:不支持事务


frm文件是 表结构信息


MYD文件是 表数据:D data


MYI文件是 表索引:I index


Memory存储引擎

每个表均以.frm文件存储


表级锁机制


不包含TEXT和BLOB字段


缺点:不支持事务,容易丢失,所有数据和索引存储在内存当中,断电就没了


有点查询速度快,


InnoDB存储引擎(聚集索引:数据和索引放在一块)现在用的最多的

frm文件是表结构信息


ibd文件是索引和数据放一块



InnoDB索引实现:

1.表数据文件本身就是按B+Tree 组织的一个索引结构文件


2.聚集索引-叶子节点包含了完整的数据记录


3.为什么INnoDB表必须有主键,并且推荐使用整型数的自增主键?不推荐使用UUID


? ? 因为UUID是String类型的,既不是整型又不是自增类型。


? ? 因为整型的数据比字符串类型的比大小速度更快,整型bigint也就8个字节,字符串可能很大。


? ? 自增:非自增的会导致树节点的分裂,分裂之后还要做*衡。自增维护成本低。


4.为什么非主键索引结构叶子节点存储的是主键值?


2.联合索引的底层数据结构


联合索引的时候先比较第一个字段的大小,第一个大小相同再比第二个的值


最左前缀:


用到索引的几种方式:①name...②name,age...③name,age,position...


eg:下面三条只有第一条用到了索引。


原因:只有采用了name之后age才是有序的,如果不采用name属性,在所有数据中,age不是有序所以还是要全表扫描


? ? ? ? ? eg:搜索age = 30 ,找到第一个数据后,第二个数据是31,但是还是要继续找后面的数据,第四个也是30.



?



友情链接: