MySQL中ddl操作或创建索引防止锁表的一些建议或解决方案

一、DDL操作

【说明】目前没有任何一种办法可以保证在DDL操作下能完全避免锁表。MySQL 需要确保数据的一致性和完整性,这意味着在执行 DDL 操作时需要获取锁

【建议】
(1)建议在生产环境中进行任何重大DDL更改,都要在测试环境充分测试验证
(2)在生产环境中对数据量较大的表进行DDL操作,选择在流量较小的时段执行较为合适

二、创建索引

表结构示例

create table t_verify
(
    id   bigint auto_increment comment 'id'
        primary key,
    name varchar(50) null comment '名称'
)
    comment '临时验证表';

1、使用 algorithm = inplace

【说明】使用 algorithm = inplace 原地算法,减少对数据库性能的影响

-- 创建索引
create index idx_name on t_verify (name) comment 'name索引' algorithm = inplace;
-- 删除索引
drop index idx_name on t_verify algorithm = inplace;

2、使用 lock = none【推荐】

【说明】使用 lock = none 明确告诉MySQL在创建索引时不锁表

-- 创建索引
create index idx_name on t_verify (name) comment 'name索引' lock = none;
-- 删除索引
drop index idx_name on t_verify lock = none;

备注:
(1)lock的可选项除了 none,还可以使用 shared(共享锁:允许读操作,但会阻塞写操作)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值