2012-08-01 46 views
0

我有以下查詢:MySQL的行鎖與OR

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

有在所有3列鍵的WHERE子句。 accountId是索引,電話和傳真與accountId相結合,以製作唯一索引:

UNIQUE KEY `phone` (`phone`,`accountId`), 
UNIQUE KEY `phone` (`fax`,`accountId`), 
KEY `aid` (`aid`), 

哪些鍵將被鎖定?我需要的是用phone =「1234」||鎖定行對於accountId = 1,傳真=「5678」。OR正確優化或所有行都將被鎖定。

MySQL的版本是5.0

回答

0

嘗試的

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

爲了獲得關於MySQL如何執行該語句的信息。

+0

可能的密鑰accountId,電話。使用的密鑰是accountId。這是否意味着accountId = 1的所有行都會被鎖定,並且有辦法解決這個問題。也許分裂成2個查詢? – NickSoft 2012-08-01 10:06:33