次のクエリがあります。
SELECT * WHERE accountId = 1 AND (phone = "1234" OR fax = "5678") FOR UPDATE
WHERE 句の 3 つの列すべてにキーがあります。accountId は index で、phone と fax は accountId と組み合わせて一意のインデックスを作成します。
UNIQUE KEY `phone` (`phone`,`accountId`),
UNIQUE KEY `phone` (`fax`,`accountId`),
KEY `aid` (`aid`),
どのキーがロックされますか? 必要なのは、 phone = "1234" || で行をロックすることです。fax = "5678" for accountId = 1. 正しく最適化されているか、またはすべての行がロックされています。
Mysql のバージョンは 5.0 です