创建索引时一定会锁表?

2024-11-05 22:26

创建索引时并不一定会锁表,这取决于具体的数据库系统、数据库版本以及创建索引的方式。

一、MySQL数据库

  1. MySQL 5.6及以前版本

    这意味着在创建索引的过程中,其他会话(session)对表的写操作(如INSERT、UPDATE、DELETE)会被阻塞,但读操作(SELECT)通常不会受到影响。

  • 在这些版本中,创建索引时通常会锁表。

  1. MySQL 5.6.7及以后版本

    这一技术允许在创建索引时,不阻塞其他会话的DML操作(INSERT、UPDATE、DELETE、SELECT)。

    因此,在这些版本中,创建索引通常不会锁表。

    如果存在活动中的事务(如慢查询或死锁等情况),DDL操作可能需要等待,这可能会影响业务数据的运行。

  • 然而,值得注意的是,Online DDL操作完成之前,必须等待在表上持有元数据锁(Metadata Lock)的事务提交或回滚。

  • 从MySQL 5.6.7版本开始,引入了Online DDL(在线DDL)技术。

  1. 创建索引的方式

    • 如果使用ALTER TABLE语句添加索引,在某些情况下可能会锁表,具体取决于MySQL的版本和配置。

    • 如果使用CREATE INDEX语句添加索引,并且数据库版本支持Online DDL,则通常不会锁表。

相关文章
热点文章
精彩视频
Tags

站点地图 在线访客: 今日访问量: 昨日访问量: 总访问量: