欢迎光临深圳市白事服务网
详情描述

MySQL加索引是否锁表取决于索引类型、存储引擎、MySQL版本和操作方式。以下是详细分析:

一、不同情况的锁表分析

1. 默认情况(MySQL 5.6之前)

ALTER TABLE users ADD INDEX idx_email (email);
  • MySQL 5.5及之前:大部分情况会锁表(COPY算法)
  • 锁表影响:阻塞所有DML操作(INSERT/UPDATE/DELETE)

2. MySQL 5.6+ 在线DDL

ALTER TABLE users ADD INDEX idx_email (email), ALGORITHM=INPLACE, LOCK=NONE;
  • ALGORITHM=INPLACE:原地重建,不复制整表
  • LOCK=NONE:允许并发读写
  • 实际影响:仅在创建索引的最后阶段有短暂的元数据锁

3. 存储引擎差异

  • InnoDB:支持在线DDL(5.6+)
  • MyISAM:总是锁表(不支持在线DDL)

二、索引操作的锁机制

1. 在线创建索引(推荐)

-- MySQL 5.6+ 自动使用在线DDL
ALTER TABLE users ADD INDEX idx_name (name);

-- 显式指定
ALTER TABLE users ADD INDEX idx_name (name),
ALGORITHM=INPLACE,    -- 原地操作
LOCK=NONE;            -- 不锁表

2. 不同算法的锁影响

算法 锁级别 性能影响 磁盘使用
COPY 表级锁 高(阻塞DML) 高(两倍空间)
INPLACE 元数据锁(短暂)
INSTANT (8.0) 元数据锁

三、实际执行建议

1. 检查支持的DDL类型

-- 查看操作是否支持在线
SELECT * FROM INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX;
-- 或使用
SHOW ENGINE INNODB STATUS;

2. 生产环境最佳实践

# 1. 使用pt-online-schema-change(第三方工具)
pt-online-schema-change \
  --alter "ADD INDEX idx_email (email)" \
  D=database,t=users \
  --execute

# 2. 分阶段操作(大表)
-- 先创建无数据的索引
CREATE INDEX idx_partial ON users(email) WHERE id > 1000000;
-- 再逐步更新

3. 规避锁表风险

-- 在低峰期执行
SET SESSION lock_wait_timeout = 300;
SET SESSION innodb_lock_wait_timeout = 300;

-- 使用INSTANT算法(MySQL 8.0+)
ALTER TABLE users 
ADD INDEX idx_email (email),
ALGORITHM=INSTANT;

四、特殊情况会锁表

即使使用在线DDL,以下情况仍可能锁表:

添加全文索引/FULLTEXT 空间索引/SPATIAL 主键索引变更 表有外键约束且需要检查时 字段类型变更+加索引组合操作

五、监控和回滚方案

-- 监控DDL进度(MySQL 5.7+)
SELECT * FROM performance_schema.events_stages_current
WHERE EVENT_NAME LIKE '%stage/innodb/alter%';

-- 设置超时防止长时间锁表
SET SESSION innodb_lock_wait_timeout = 30;
SET SESSION lock_wait_timeout = 30;

总结建议

MySQL 5.6+:默认支持在线加索引,但显式指定ALGORITHM=INPLACE, LOCK=NONE更安全 大表操作:使用pt-online-schema-change或gh-ost MySQL 8.0+:优先使用ALGORITHM=INSTANT 始终先在测试环境验证:使用相同数据量测试 有备份才操作:避免不可逆问题

最佳实践:对大表(>1GB)的索引操作,建议在维护窗口进行,并使用专业工具监控进度和影响。

相关帖子
2026年,小区公共收益的归属权和使用范围在法律上有哪些明确规定?
2026年,小区公共收益的归属权和使用范围在法律上有哪些明确规定?
2026年手机号实名制政策有哪些新变化,对普通用户有什么具体影响?
2026年手机号实名制政策有哪些新变化,对普通用户有什么具体影响?
深圳市殡葬服务一条龙价格-丧葬服务租车,丧事出殡服务
深圳市殡葬服务一条龙价格-丧葬服务租车,丧事出殡服务
深圳市搜索引擎优化@网站建设服务,专业团队
深圳市搜索引擎优化@网站建设服务,专业团队
2026年社保待遇领取资格认证,有哪些更方便的线上新方式可以了解?
2026年社保待遇领取资格认证,有哪些更方便的线上新方式可以了解?
18岁以下孩子用不用单独参保长期护理险,政策怎么说?
18岁以下孩子用不用单独参保长期护理险,政策怎么说?
2026年政策落地后,对于即将退休的人员,养老金计发办法会有调整吗?
2026年政策落地后,对于即将退休的人员,养老金计发办法会有调整吗?
按揭车押车贷款被拒的常见原因,看看你中了几条
按揭车押车贷款被拒的常见原因,看看你中了几条
顶楼夏天比楼下高好几度冬天又更冷,热量到底是怎么传过来的?
顶楼夏天比楼下高好几度冬天又更冷,热量到底是怎么传过来的?
2026年个人所得税APP填报专项附加扣除时,常见的信息填报错误有哪些需要避免?
2026年个人所得税APP填报专项附加扣除时,常见的信息填报错误有哪些需要避免?
长期食用含添加剂的预制菜,对身体健康可能存在哪些潜在影响?
长期食用含添加剂的预制菜,对身体健康可能存在哪些潜在影响?
身份证在有效期内但闸机读不出,是不是芯片被手机消磁了?
身份证在有效期内但闸机读不出,是不是芯片被手机消磁了?
公司经营贷额度与实缴资本,注册资本对额度影响
公司经营贷额度与实缴资本,注册资本对额度影响
菠菜和豆腐搭配真的会导致结石风险大幅增加吗?
菠菜和豆腐搭配真的会导致结石风险大幅增加吗?
在人际交往或商业合作前,如何合法合规地查询对方的信用状况?
在人际交往或商业合作前,如何合法合规地查询对方的信用状况?
补缴了城乡居民养老保险后,个人账户的累计金额会如何进行计算?
补缴了城乡居民养老保险后,个人账户的累计金额会如何进行计算?
新生儿医保和商业保险有什么区别?两者应该如何搭配互补?
新生儿医保和商业保险有什么区别?两者应该如何搭配互补?
海淀六年一学位优化后,房产学位被占用也能入学,具体会走哪种划片路径?
海淀六年一学位优化后,房产学位被占用也能入学,具体会走哪种划片路径?
个人负债、银行流水影响审批,学会自查测算综合负债风险比例
个人负债、银行流水影响审批,学会自查测算综合负债风险比例
商家写明
商家写明"不支持七天无理由"的链接,消费者下单后还能反悔吗?