需求: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;
网友评论