MySQL 事务&锁

2020-05-17  本文已影响0人  Yves_Chen

MySQL(事务&锁)

引擎

InnoDB

MyISAM

索引

特点

类别

索引排序

1、ORDER BY的索引优化。如果一个SQL语句形如:
SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort];
在[sort]这个栏位上建立索引就可以实现利用索引进行order by 优化。

2、WHERE + ORDER BY的索引优化,形如:
SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [value] ORDER BY [sort];
建立一个联合索引(columnX,sort)来实现order by 优化。

注意:如果columnX对应多个值,如下面语句就无法利用索引来实现order by的优化...

集群

读写分离

master-slave

分区

范围分区

哈希分区

count(*)

innodb遍历全表得出长度,采用行锁,若维护一个需要同步修改的rows,行锁就无意义

myisam采用表锁,修改rows同步无压力

命令

不可重复读VS幻读

不可重复读

幻读

在当前读时,存储引擎返回给Server的记录需要加锁 所以在不能使用索引时,将全表搜索,返回所有记录给server,导致所有行加锁

在实际的实现中,MySQL有一些改进,在MySQL Server过滤条件,发现不满足后,会调用unlock_row方法,把不满足条件的记录放锁 (违背了2PL的约束)。这样做,保证了最后只会持有满足条件记录上的锁,但是每条记录的加锁操作还是不能省略的

上一篇下一篇

猜你喜欢

热点阅读