为什么mysql决定使用索引合并,尽管我已经使用了唯一的键索引?

为什么mysql决定使用索引合并,尽管我已经使用了唯一的键索引?,mysql,Mysql,当某个update语句同时出现时,我们发现了一些死锁情况 从死锁日志中,我们发现死锁发生在两个具有相同结构但参数不同的sql之间 在解释一个SQL之后 update repay_plan_info_1 SET actual_pay_period_amount = 20742, actual_pay_principal_amount = 19998, actual_pay_interest_amount = 726, actual_pay_fee = 0,

当某个update语句同时出现时,我们发现了一些死锁情况

从死锁日志中,我们发现死锁发生在两个具有相同结构但参数不同的sql之间

在解释一个SQL之后

update repay_plan_info_1
 SET actual_pay_period_amount = 20742,

    actual_pay_principal_amount = 19998,

    actual_pay_interest_amount = 726,

    actual_pay_fee = 0,

    actual_pay_fine = 18,

    actual_discount_amount = 0,  

    repay_status = 'PAYOFF',

    repay_type = 'OVERDUE',

    actual_repay_time = '2019-08-12 15:48:15.025' 


 WHERE (  user_id = '938467411690006528'          
              and loan_order_no = 'LN201906130129401690006528175485'
              and seq_no = 2
              and repay_status <> 'PAYOFF' )
但我们已经将贷款订单号
+
序号`定义为unque键

 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_repay_order` (`loan_order_no`,`seq_no`),
 UNIQUE KEY `uk_repay_plan_no` (`repay_plan_no`),
 KEY `idx_user_id` (`user_id`),
 KEY `idx_create_time` (`create_time`)
解决方案:我们删除索引idx\u user\u id并创建另一个组合索引(user\u id、loan\u order\u noseq\u no),这解决了死锁问题

问题:

  • 为什么mysql选择索引合并,即使我定义了唯一的键
  • 当我们解释一些死锁sql时,我们发现有些sql不使用索引合并,但有些使用索引合并,因此可能会影响mysql的决策,请注意,所有sql都使用唯一密钥,这意味着它们总是只更新一条记录

  • 请删除图像并以文本格式替换解释语句的结果;图像很难阅读。@MadhurBhaiya,很遗憾我们已经解决了问题,我们无法解释sql来显示相同的结果,我们只有开发人员在当晚捕获的屏幕截图。所以我可以;不再有文本输出
     PRIMARY KEY (`id`),
     UNIQUE KEY `uk_repay_order` (`loan_order_no`,`seq_no`),
     UNIQUE KEY `uk_repay_plan_no` (`repay_plan_no`),
     KEY `idx_user_id` (`user_id`),
     KEY `idx_create_time` (`create_time`)