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.