为线上的数据表增加或删除索引

如题,当我为数据库中的某一张表添加或删除索引时我有两种选择

  1. 使用 alter table 更改表结构
  2. 使用 create/drop index 命令

这两种方法哪一个好一点?我要考虑的是,如果这张表的数据量比较大,在创建/删除索引的操作中会不会导致整张表被上锁然后导致用户没有办法进行写入操作?

我也想过把这张表备份一份,然后在备份表上操作,但是如果在操作的过程中肯定会有写入操作,这样就导致了备份表与实际表的数据不统一。

不知道到有没有好的方法和思路?平时我的项目数据量都比价小,没有考虑过这种问题,还请各路大神赐教!

阅读 2.7k
1 个回答

不知道你具体使用的是什么数据库,我了解的mysql

mysql 5.6 以前的版本添加索引会阻塞读写,影响业务。mysql 5.6以后的版本添加索引具有新特性在线DDL,影响较小,只有开始和结束阶段,其他时间不阻塞读写。
最好的方法是使用在线ddl工具 pt-osc ,但是一些限制,比如必须有主键,不能有触发器等...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题