大表加索引方案

94 阅读1分钟

方案一:

  1. 先创建一张表,结构和原表相同;
  2. 在新表上添加索引;
  3. rename新表为原表的表名,原表换新的名称;
  4. 为原表新增索引;
  5. 待索引创建成功后,rename原表为原来的名称,并将新表里的数据导入到原表中
-- 假设需要添加索引的表为`fea_moni_res`
-- 1. 新建与表`fea_moni_res`同结构的表
CREATE TABLE fea_moni_res_tmp LIKE fea_moni_res;

-- 2. 新表上添加索引
ALTER TABLE fea_moni_res_tmp ADD INDEX idx_index_name (col_name);

-- 3. *rename*新表为原表的表名,原表换新的名称
RENAME TABLE fea_moni_res TO fea_moni_res_1, fea_moni_res_tmp TO fea_moni_res;

-- 4. 为原表新增索引,此步耗时较长
ALTER TABLE fea_moni_res_1 ADD INDEX idx_index_name (col_name);

-- 5. 待索引创建成功后,rename原表为原来的名称,并将新表里的数据导入到原表中
RENAME TABLE fea_moni_res TO fea_moni_res_tmp, fea_moni_res_1 TO fea_moni_res;
-- 需要根据业务来确定如果导入数据
INSERT INTO fea_moni_res(col_name1, col_name2) SELECT col_name1, col_name2 FROM fea_moni_res_tmp;

方案二:

  • 1.先创建一张跟原表A数据结构相同的新表B。
  • 2.在新表B添加需要加上的新索引。
  • 3.把原表A数据导到新表B
  • 4.rename新表B为原表的表名A,原表A换别的表名;