lla*_*aro 5 mysql query concurrency
我想知道是否同时 UPDATE .... LIMIT N 不会与查询数据库的多个客户端重叠。
在 UPDATE ... LIMIT N 之后,客户端将使用分配的一些 client_id 进行 SELECT。我不希望客户端重叠结果,因此每次更新后使用 SELECT 查询数据库时,每个客户端都会有不同的记录。
这取决于表引擎?
更新锁定表/记录?(我确定这取决于引擎)。
我认为 UPDATE LIMIT 不应重叠结果,dbs 具有 ACID 属性......我想确认这一点。
这取决于表引擎?
是的。MyISAM 会锁表,InnoDB 会锁行
如果您正在寻找 ACIDity,您将希望使用 InnoDB。本文档页面中描述了InnoDB 如何处理锁定
上述文档页面上的以下用户评论说明了 InnoDB 在大型表上的性能缺陷:
主要问题:在使用索引更新期间行被锁定。例如,
UPDATE tab SET col1=3 WHERE col2=17;
除非 col2 被索引,否则将锁定整个表(在这种情况下,只有 col2=17 的行将被锁定)。
和
为了扩展上述注释,任何为更新/删除执行表扫描的操作都将锁定表中的所有行
课外阅读:
TL;DR:InnoDB 索引锁是主要的架构性能缺陷,这就是为什么你听说大表更慢的原因。很有可能有更多可扩展的磁盘写入引擎,并且所有大型 InnoDB 写入/插入基准都受到了严重影响。