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

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年社保待遇领取资格认证,有哪些更方便的线上新方式可以了解?
跨年度住院的医疗费用,在医保报销时应该如何划分和计算?
跨年度住院的医疗费用,在医保报销时应该如何划分和计算?
对于初次建立信用记录的年轻人,有哪些实用建议可以有效避免逾期?
对于初次建立信用记录的年轻人,有哪些实用建议可以有效避免逾期?
对于视力健全者而言,我们可以通过哪些具体行动来保护和维护盲道的畅通?
对于视力健全者而言,我们可以通过哪些具体行动来保护和维护盲道的畅通?
了解银行卡进账的基本规则,对于个人日常财务管理有哪些实际的帮助?
了解银行卡进账的基本规则,对于个人日常财务管理有哪些实际的帮助?
异地房产办理抵押贷款流程,跨区域抵押的限制与可行性
异地房产办理抵押贷款流程,跨区域抵押的限制与可行性
签订离婚协议后,双方基于自愿的补充或变更协议是否有效?
签订离婚协议后,双方基于自愿的补充或变更协议是否有效?
商铺门面房抵押贷款逾期多久会被起诉?逾期阶段与法律后果时间表
商铺门面房抵押贷款逾期多久会被起诉?逾期阶段与法律后果时间表
房抵贷与按揭房贷并存:月供叠加压力大,需科学计算总负债率与还款能力
房抵贷与按揭房贷并存:月供叠加压力大,需科学计算总负债率与还款能力
过桥垫资办理失败原因有哪些?常见失败因素全面解析说明
过桥垫资办理失败原因有哪些?常见失败因素全面解析说明
额度与还款期限有关吗?小额信用贷款额度与期限搭配
额度与还款期限有关吗?小额信用贷款额度与期限搭配
单位或学校应如何建立有效的突发事件应急支持流程?
单位或学校应如何建立有效的突发事件应急支持流程?
个人债务优化重组要求和债务减免要求有什么区别?差异解析
个人债务优化重组要求和债务减免要求有什么区别?差异解析
个体户信用贷款额度放款需要多久?放款时间与额度关系
个体户信用贷款额度放款需要多久?放款时间与额度关系
看到“暴雪预警”和“道路结冰预警”同时发布,出行需要注意什么?
看到“暴雪预警”和“道路结冰预警”同时发布,出行需要注意什么?
在家如何通过观察颜色、气味等简单方法,判断预制菜是否已经变质?
在家如何通过观察颜色、气味等简单方法,判断预制菜是否已经变质?