MySQL 删除某些列时出现死锁

MySQL deadlocking when deleting by certain columns

我有一个 table 包含以下列

document_uuid, driver_uuid, vehicle_uuid, etc

document_uuid 是主键并且始终是唯一的。
driver_uuid 是必填字段,并不总是唯一的。
vehicle_uuid 是可选字段。

我们不断地向这个 table 删除和添加行。删除是 driver_uuid 或 document_uuid.

今天我添加了一些代码,偶尔也会被 vehicle_uuid 删除,部署开始导致 mysql 死锁。

死锁异常没有显示太多信息:

'Deadlock found when trying to get lock; try restarting transaction') [SQL: u'DELETE FROM documents_rich_context WHERE vehicle_uuid = %s']

问题是 vehicle_uuid 字段缺少索引。

没有索引,数据库引擎必须抓取更多的行来识别要删除的行,从而导致死锁的可能性更高。

添加索引解决了问题。