本文作者:kris

关于MySQL innodb_autoinc_lock_mode介绍-mysql innodb锁

kris 2025-01-31 10:06:05 2
关于MySQL innodb_autoinc_lock_mode介绍-mysql innodb锁摘要: 浅谈MySQL存储引擎选择InnoDB与MyISAM的优缺点分析?MyISAM引擎设计简单,数据以紧密格式存储,所以某些读取场景下性能很好。但是MyISAM最典型的还是表锁问题,这...

浅谈MySQL存储引擎选择InnoDB与MyISAM的优缺点分析?

MyISAM引擎设计简单,数据以紧密格式存储,所以某些读取场景下性能很好。

但是MyISAM最典型的还是表锁问题,这样会导致长期处于"Locked"状态。而且数据恢复时间长,无事务等问题或短板。

虽然5.1之前MyISAM的读比Innodb快很多,但是在5.1之后,默认引擎已经变为Innodb。

Innodb读写有很大的提高,采用MVCC来支持高并发,针对行加锁,是使用最广泛的存储引擎。

关于MySQL innodb_autoinc_lock_mode介绍-mysql innodb锁

图片来源:网络

官方建议尽量将MyISAM都换为Innodb。

mysql的innodb添加了事务为什么还会出现数据丢失问题?

会话的隔离级别设置为serializable的时候,其他会话对该表的写操作将被挂起;但是还是可以读取数据的,因此根据读取的数据做更新还可能会有问题。应用程序中为了防止核心数据被并发修改,一般在查询数据的语句中增加for update的选项,从数据库层面避免造成同一条数据被两个事务同时进行操作。

mysql的innodb存储引擎下,主键默认是按照自增的顺序排的吗?

默认楼主使用的是InnoDB存储引擎尽量使用业务无关的自增列作为主键,主要原因:

1. InnoDB数据是按照主键聚簇的,数据在物理上按照主键大小顺序存储,使用其他列或者组合无法保证顺序插入,随机IO(SSD的话影响不大)导致插入性能下降2.所有二级索引都存储了主键的,采用二级索引查询,首先找到的主键,然后通过主键定位数据,如果直接使用组合字段作为主键,会导致二级索引占用空间较大,bufferpool中存储的记录数较少,影响性能,而自增列只占4或者8个字节,代价非常小

MYSQL-Innodb下,update的并发是否会产生脏数据?

MySQL并发情况下更新数据,正常应该是不会新增脏数据。但不排除一种情况,那就是在程序逻辑是判断如果存在则更新不存在则新增数据。这种情况下如果没有唯一索引的约束,就会产生脏数据。

这种情况其实和并发情况下事务产生脏读类似。

并发情况下如果事务的隔离级别过低(未提交读);则有可能会出现脏读的情况,也就是一个事务读到了另一个事务没有提交的更新数据。也有可能撤销事务时把另一个事务的更新结果覆盖,也就是丢失更新。

文章版权及转载声明

作者:kris本文地址:https://www.damoyx.com/p/29129.html发布于 2025-01-31 10:06:05
文章转载或复制请以超链接形式并注明出处大漠游侠网

阅读
分享