mysql index merge 一个死锁案例
https://xie.infoq.cn/article/ae89edfd8feb4e5c84342e096
看过程是因为 交叉索引
接着查看了 SQL 执行计划,发现使用了 index_merge。index_merge 是 MySQL 5.1 后引入的一项索引合并优化技术,它允许对同一个表同时使用多个索引进行查询,并对多个索引的查询结果进行合并后返回。
CREATE TABLE `phone_send_record` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`task_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '发送批次id',
`phone` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '手机号',
`status` smallint(4) NOT NULL DEFAULT '0' COMMENT '发送状态 0未发送 1发送成功 2 发送失败',
PRIMARY KEY (`id`),
KEY `idx_taskId` (`task_id`) USING BTREE,
KEY `idx_phone` (`phone`) USING BTREE
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '短信发送记录表'
update phone_send_record set status = 0 where phone = '13555111111' and task_id = 123;
update phone_send_record set status = 0 where phone = '13555222222' and task_id = 123;
原先还真没一直用这类索引。都是联合索引