MySQL如何给千万级数据库表加索引

需求:MySQL给一个千万级数据表加索引

  • 普通办法,实测该办法会直接卡死
# 给data_table表添加一个名为index_sel的索引,索引字段包括`raise_time`, `entity_id`
ALTER TABLE `data_table` ADD INDEX `index_sel`(`raise_time`, `entity_id`);
  • 保险办法,先拷贝原表的结构作为一个新表暂时不拷贝数据,再在新表上添加索引,然后把原表的数据拷贝到新表,再将原表表名改为备份表,再把新表改为为原表的名字,最后测试没问题的话就可以删除备份表了
# 先拷贝原表的结构到新表,表名为:data_table_new
# 给新表上添加索引
ALTER TABLE `data_table_new` ADD INDEX `index_sel`(`raise_time`, `entity_id`);
# 给新表插入原表数据
insert into data_table_new select * from data_table;
# 将原表改为data_table_old
ALTER TABLE data_table RENAME TO data_table_bak;
# 将新表名改为原表
ALTER TABLE data_table_new RENAME TO data_table;
# 最后测试没问题再删除备份表
DROP TABLE data_table_bak;

你可能感兴趣的:(MySQL如何给千万级数据库表加索引)