MySQL Inplace与Online索引创建方法详解

2 下载量 4 浏览量 更新于2024-08-30 收藏 115KB PDF 举报
本教程详细介绍了在MySQL中使用Inplace和Online两种方式创建索引的过程和特点,针对InnoDB存储引擎的不同版本。MySQL早期版本主要采用CopyTable方式创建索引,该方法通过临时表复制原表数据,创建过程不影响数据读取但占用两倍存储空间。Inplace方式在MySQL 5.5及后续版本中引入,索引在原表上直接创建,提高了效率但限制了写操作。 Online方式是MySQL 5.6.7以后的改进,旨在提供更高的并发性。InnoDB的OnlineAddIndex采用Inplace方式,但允许在创建索引过程中更新原表记录,同时将这些修改记录保存在RowLog中。创建完成后,通过重放RowLog确保索引与聚簇索引同步,整个过程只在最后阶段锁表,减少了锁定时间。 以下是具体步骤和注意事项: 1. CopyTable方式: - 创建一个表`t1`并插入数据,如`t1(a int, b int)`。 - 使用`ALTER TABLE t1 ADD INDEX idx_t1_b(b)`,此过程会创建临时表并复制数据。 2. Inplace方式: - 仍用`t1`表,执行`ALTER TABLE t1 ADD INDEX idx_t1_b(b)`,此时直接在原表上添加索引,禁止写操作,直到索引创建完成。 3. Online方式 (InnoDB OnlineAddIndex): - 在MySQL 5.6.7及以上版本中,创建索引变得更高效: - 首先执行`ALTER TABLE t1 ADD INDEX idx_t1_b(b)`,在遍历聚簇索引时,允许部分记录修改,改动保存RowLog。 - 当索引创建完毕后,通过重放RowLog将更改应用于原表,保持一致性,同时减少锁表时间。 总结来说,Inplace和Online创建索引的方式旨在提高数据库性能,减少资源消耗。Inplace方式在MySQL 5.5及后续版本中提供了更好的空间利用,而Online方式在保证并发性的同时优化了锁表策略。根据实际需求和数据库环境,选择合适的创建索引方式可以显著提升数据库操作的效率。