MySQL创建索引导致锁及表锁阻塞查询

本文探讨了在MySQL 5.6中,创建索引时如何导致锁及表锁阻塞查询的问题。当在表有活跃查询时执行DDL操作,如ALTER TABLE,会引发表锁,阻塞所有对表的读写操作,直至慢查询结束。建议在业务低峰期执行此类操作以避免影响正常业务。

一:场景

-- 原有表结构'
CREATE TABLE `leyangjun_user_test` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `uid` int(11) NOT NULL DEFAULT '0' COMMENT 'uid',
  `supplier_id` int(11) NOT NULL DEFAULT '0' COMMENT '服务商ID',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uid_supplier_id` (`supplier_id`,`uid`,`type`),
  KEY `ind_created_at` (`created_at`)
) ENGINE=InnoDB AUTO_INCREMENT=2570659 DEFAULT CHARSET=utf8mb4 COMMENT='乐杨俊用户测试'

-- 新增字段和修改所以
alter table leyangjun_user_test add `type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '用户类型:1借钱,2拿钱' after supplier_id;
ALTER TABLE `leyangjun_user_test` DROP INDEX `uid_supplier_id`; -- 删除索引
ALTER TABLE `leyangjun_user_test` ADD UNIQUE `uid_supplier_id` (`uid`,`supplier_id`,`type`); -- 重建索引

-- 历史原因(created_at没加索引导致慢查询)
ALTER
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值