MySQL的存储引擎比较(MyISAM和InnoDB)

存储引擎 简介 场景 特点 索引数据结构 索引区别
InnoDB InnoDB是Inno Database的缩写。Innobase Oy是芬兰的一家公司,InnoDB其实就是以公司名命名的了 分布式系统,需要事务等场景 支持事务 B+树 数据文件本身也是索引文件。以id为索引的data中放的就是完整的那行数据,非id作为索引的叶子结点中的data放的是id的值。
MyISAM ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法。不是事务安全的,而且不支持外键,如果执行大量的select,insert MyISAM比较适合 报表系统 不支持事务 B+树 索引文件和数据文件分开,结点中的数据存的是物理地址

B+树示例图:
MySQL的存储引擎比较(MyISAM和InnoDB)_第1张图片

聚簇索引:像innodb这种原生的数据文件就是索引文件的组织结构,就叫默认的主键索引为聚簇索引。

为什么mysql主键不推荐使用UUID生成的超长字符串作为主键

这样会导致所有的索引中的data存的都是这个主键值,浪费磁盘空间

为什么mysql主键推荐自增

1、如果自增,那么增加时只需要对B+树执行增加操作即可,否则,对于不是单调递增的 主键,执行插入操作,会导致B+树分裂后重新组织,浪费时间
2、mysql是按页进行存储,如果不是单调递增的主键,可能会导致大量数据的移动

mysql 页和数据的关系

MySQL的存储引擎比较(MyISAM和InnoDB)_第2张图片
MySQL的存储引擎比较(MyISAM和InnoDB)_第3张图片

参考:https://zhuanlan.zhihu.com/p/93956741

索引的使用规则

1、全列匹配

2、最左前缀匹配

3、最左前缀匹配了,但中间某个值没有匹配
a,b,c联合索引,sql查询中只用了a,c,会按照a的值在索引里找,找完后会有一个集合,然后在集合中根据c的值进行过滤,c的值不走索引

4、前缀匹配

使用like时,%不能放在前边

5、范围列查询
只有满足最左前缀的列用到了索引

6、包含函数
对某个列使用了函数 substring,date,则索引失效

索引的缺点

1、占用额外磁盘空间
2、进行插入删除时会同时修改索引,导致性能损耗

你可能感兴趣的:(mysql)