MySQL 的事务隔离级别
一般为读未提交
事务隔离是为了解决脏读(读未提交)、不可重复读、幻读等问题;
- 读未提交
- 性能最好,但是野蛮,因为不需要任何锁,所有可能会出现脏读等问题(读取到未提交的、或者是回滚的数据)事务没有隔离
- 读已提交
- 可重复读
- 串行化
InnoDB 和 MyISAM 的区别
InnoDB的特点
- 事务支持
- InnoDB支持事务 遵从ACID(原子性、一致性、隔离性、持久性)MyISAM不支持事务,可能会导致数据不一致
- 锁定级别
- InnoDB支持行级锁定,再并发读写的时候,之锁定行,不锁定表,提高并发性能和吞吐量
- 行级锁定是如何实现的:通过索引的索引项枷锁实现,只能通过索引条件来检索数据、不论使用主键索引、唯一索引还是普通索引,InnoDB都会使用行锁来对数据加锁。
- MyISAM锁定表,并发性能下降
- 数据完整性(与事务支持有关)
- InnoDB实现外键约束,和回滚日志保证数据的一致性和完整性、InnoDB适合数据关系复杂的程序
- 并发性能的差距(与锁定级别有关)
- 读写性能的差异:InnoDB的增删改查性能高,MyISAM的查询性能高
- 索引方式
- InnoDB使用聚集索引、及数据按照主键 的顺序存储,所以基于主键的查找会提高效率
- MyISAM使用非聚集索引,索引和数据存储和表定义是分开的,所以需要磁盘IO等
- MyISAM支持全文索引
- 外键支持
- InnoDB支持外键,MyISAM不支持
- 存储方式(InnoDB存储在一个文件,MyISAM存储分三份文件)
- InnoDB是MySQL5.5之后的默认引擎
MySQL 索引,以及它们的好处和坏处
索引:指向表行的指针,蕴蓄查询操作快速确定哪些符合条件,并检索到这些行的其他列值的数据结构
分为:普通索引、唯一索引、主键索引、外键索引、全文索引、复合索引等