mysql常用的存储引擎

索引分为两种,聚集索引和非聚集索引

聚集索引指的是叶子顺序和物理地址顺序一致

非聚集索引指的是只有叶子顺序是连接着的,物理地址则不一致

常用的存储引擎

mysql常用的存储引擎有Innodb和Myisam,都是基于B+树实现的。

 

Innodb

1.Innodb默认聚集索引,因此他的索引文件就是包含数据文件内容,索引叶子节点直接保存数据(.idb数据文件)

(1).主键就是聚集索引

(2).在没有主键的情况下会将唯一非空索引作为聚集索引

(3).如果都没有的情况下就会在内部生成隐式主键作为聚集索引,这个列是一个6字节(48位)的整数作为聚集索引

2.Innodb默认是行级锁,行级锁是基于索引实现的,因此SQL中如果没有使用到索引的情况下就不会使用行级锁,而会换为使用表级锁,从而导致性能下降

3.支持事务

4.需要维护MVCC一致性(多版本并发控制),因此多出来了维护成本

 

 

 Myisam

Myisam属于非聚集索引,因此他的数据文件内容和索引文件是分离的,索引叶子节点保存数据指针(.myd数据文件,.myi索引文件)

1.不支持事务,崩溃后无法安全恢复

2.比Innodb的查询速度更快

3.Myisam使用的是表级锁,在同时有读和写的操作时候,即使读锁比写锁先进到锁等待队列,写锁也会先插入到读锁的前面先进行写的操作,因此在有大量写的操作时,Myisam可能会造成读取数据大量在阻塞的情况

 

总结

1.Innodb主键索引叫聚簇索引、其他索引都叫辅助索引(二级索引,也可以叫非聚簇索引),当使用辅助索引时,会先从辅助索引中找到对应的行key,然后再根据key去主键索引找对应的行数据,造成两次索引查找。

2.Myisam的主键索引和辅助索引都是非聚簇索引,非聚簇索引的特性就是叶子节点不会保存行数据,而是保存数据记录的地址,再直接去数据文件中找。

 

posted @ 2020-01-09 14:51  Ninon  阅读(383)  评论(0编辑  收藏  举报