✅MySQL做索引更新的时候,会锁表吗?

✅MySQL做索引更新的时候,会锁表吗?

典型回答

看版本,在MySQL 5.6版本中,已经支持了Online DDL,一般来说是不会锁表了。

✅什么是OnlineDDL

但是,虽然支持了Online DDL也不建议在业务高峰期做变更。因为Online DDL是尽最大可能保证DDL期间不阻塞DML动作。但是需要注意,这里说的尽最大可能意味着不是所有DDL语句都会使用OnlineDDL加速。

资源争抢:而且,**Online DDL 在执行过程中会占用系统资源,如 CPU、内存和 I/O。**这可能会对数据库的性能产生一定影响,尤其是在数据量较大的情况下。在非高峰期执行 DDL 变更可以减少对业务操作的干扰,避免高峰期因为资源争用而影响系统性能。

也可能会锁表:虽然 Online DDL 尽可能得减少了锁表的时间,**但在某些复杂操作(如涉及索引重建、大量数据的表结构更改)中,可能仍会有短暂的锁表情况。**所以在非高峰期进行变更,可以降低长时间锁等待对用户请求的影响。

主从延迟:在主从复制的数据库架构中,DDL 操作需要同步到从库。如果高峰期有大量写入操作,DDL 操作可能会增加主从同步延迟。