0

次のクエリがあります。

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 です

4

1 に答える 1

0

試してみてください

EXPLAIN SELECT * WHERE accountId = 1 AND (phone = "1234" OR fax = "5678") FOR UPDATE

MySQL がこのステートメントを実行する方法に関する情報を取得するため。

于 2012-08-01T08:56:11.307 に答える