首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql中的死锁机制及主键顶部索引的使用

问MySql中的死锁机制及主键顶部索引的使用
EN

Stack Overflow用户
提问于 2022-07-29 13:19:24
回答 1查看 107关注 0票数 0

我阅读了很多关于InnoDB引擎内部及其锁定机制(不同锁和死锁类型)的文章。

在执行更新操作时,我看到了这个错误:

代码语言:javascript
复制
'Deadlock found when trying to get lock; try restarting transaction' 

在执行update操作时,按照此处的建议创建an index on field called resource_id。

我想知道在MySql DB中是否存在避免死锁的差异/增加值,方法是在已经定义为PrimaryKey的列中添加新索引。

为什么MySql不阻止您在已经是主键的同一列上添加索引?这使我理解到这是有区别的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-30 06:05:37

有一些关于不允许任何真正多余的指数的说法。

然而,PRIMARY KEY(x), INDEX(x)是否真的是多余的,是值得商榷的。例如,如果您有一个只需要x的查询,那么INDEX将比看似等效的PK更可取。

有很大的不同。PK与数据“聚集”在一起。也就是说,PK不是单独存储的,而是按PK顺序存储的。这就省去了只为PK单独设置一个BTree的需要。

除了我上面提到的那个罕见的例子。

另一方面,我认为INDEX(x), INDEX(x)没有任何理由,除了未能捕获它是多余的。请注意,在创建FOREIGN KEY (它确实创建了一个INDEX )时,确实试图避免创建另一个索引。

请注意,如果您还有不适用于INDEX(x)的INDEX(x,y),那么几乎在所有情况下都应该删除UNIQUE(x), INDEX(x,y)。而且,由于PK实际上是一个UNIQUE指数,因此存在明显的相关性。

要我继续吗?也许还有十几个与你的问题有点相关的微妙点。

我认为开发人员将您的请求视为“低优先级”。有句老话说:“如果它没坏,就不要修理它。”对于MySQL,我将把它解释为“如果它没有损坏太多,就不用费心去修复它;找一些更重要的东西来做。”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73167421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档