1. user_id为索引,status无索引 BEGIN; SELECT SUM(interest) FROM `pm_interests` WHERE user_id=10460 AND `status`=0 FOR UPDATE;

结果凡是user_id=10460不管status为何值,都会锁住

  1. user_id为索引,status为索引 BEGIN; SELECT SUM(interest) FROM `pm_interests` WHERE user_id=10460 AND `status`=0 FOR UPDATE;

结果凡是user_id=10460不管status为何值,都会锁住

SQL分析,查询语句使用的索引为idx_pm_interests_user_id

  1. 创建为user_idstatus创建组合索引 BEGIN; SELECT SUM(interest) FROM `pm_interests` WHERE user_id=10460 AND `status`=0 FOR UPDATE;

结果凡是user_id=10460 只锁定status为1,其它状态未锁定