数据库引擎
Innodb和MyISAM的区别
Innodb 支持行锁 支持表锁 支持事务 支持外键 数据存储时索引和数据在一起
MyISAM 支持表锁 不支持事务 数据存储方式 数据和索引两个单独的文件夹
Innodb:.frm文件+.idb文件(包含数据和索引)
MyISAM:.frm文件+数据文件+索引文件
常见索引
主键索引 唯一索引 普通索引 联合索引
主键索引:叶子节点中存储全量数据
唯一索引:索引键值不能重复
普通索引:叶子节点中存储主键ID,不存储全量数据
联合索引:对表中多个列进行索引,区别是联合索引的键值数量大于1,检索时遵循最左匹配原则。
如联合索引(a,b),先对索引a进行排序,然后对索引b进行排序。b依赖于a,检索时如果a的索引失效,b的索引也会失效
image.png
索引类别
聚簇索引 非聚簇索引
1.叶子节点中顺序存储数据 如主键索引
2.叶子节点中不存储全量数据,只存储主键ID 如普通索引
普通索引检索时先查到叶子节点中的主键ID,然后回表查询,通过主键索引去查询全量数据
索引查询
覆盖查询 回表查询
覆盖查询:只需要在一个索引树上能查询到所需数据,不需要回表查询全量数据
回表查询:普通索引叶子节点只存储了索引值和主键ID,查询其它数据时需要根据主键ID进行聚簇索引查询,获取到全量数据
索引数据结构
B+树
B+树和B树的区别,B+树中非叶子节点不存储数据
B树和平衡二叉树的区别,B树节点中可存储多个键值
1.非叶子节点只存储指针和索引键值,一个节点可存储多个键值,树的高度一般是3到4阶;
2.数据查询的时候是分页查询,每页的磁盘空间大小是16kb;
3.索引使用int或者varchar类型,取决于占用空间大小,int占用4个字节,大于4个字节的用int,小于4个字节的用varchar;
4.联合索引遵循最左原则;
5.索引并不是越多越好,越多占用磁盘空间越大,插入数据时越耗时;
6.索引字段的长度越短越好,字段越短非叶子节点存储的键值越多;
7.普通索引检索时先在非叶子节点中检索出主键的ID值,然后回表通过主键ID检索数据;
8.在未设置主键的表中加入一条数据,会默认增加一条主键rowid;
9.主键id最好设置成自增模式,索引数据存储是按序排列的,自增模式可以方便快速查询;
网友评论