mysql有两个常见的的存储引擎: Mylsam 和innoDB
1 Mylsan
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,而且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,而且
最大的缺陷就是崩溃后无法安全恢复。
不过,5.5版本之后,MySQL引入了InnoDB(另一种数据库引擎)。
下面这张图只是想表达的意思是现在大多数时候我们使用的都是InnoDB存储引擎,但是在某些情况下使用MyISAM更好,比如:
MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。
在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎。
Mylsam的特点
- 不支持行锁(MyISAM只有表锁),读取时对需要读到的所有表加锁,写入时则对表加排他锁;
- 不支持事务
- 不支持外键
- 不支持崩溃后的安全恢复
- 在表有读取查询的同时,支持往表中插入新纪录
- 支持BLOB和TEXT的前500个字符索引,支持全文索引
- 支持延迟更新索引,极大地提升了写入性能
- 对于不会进行修改的表,支持压缩表 ,极大地减少了磁盘空间的占用
2 InnoDB
2.1 InnoDB简介
InnoDB是MySQL的默认数据库引擎(5.5版之后),2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能。
2.2 InnoDB特点
- 支持行锁,采用MVCC来支持高并发,有可能死锁
- 支持事务
- 支持外键
- 支持崩溃后的安全恢复
- 不支持全文索引
补充的概念:
Mysql的行锁和表锁( 锁是计算机协调多个进程或纯线程并发访问某一资源的机制)
- 表级锁: 每次操作锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;
- 行级锁: 每次操作锁住一行数据。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高;
参考转载出处:
Java Guide
https://juejin.im/post/5b1685bef265da6e5c3c1c34
网友评论