背景
公司某产品基础数据表,各模块依赖这张表,该表数据量四百万,导致某功能打开页面半小时不出数据,故添加索引优化;
直接alter table add index 添加索引,执行一个小时没反应,并且会导致锁表;故放弃该办法,最终解决办法如下:
解决方案
- 导出原表数据
- 创建新表与原表结构保持一致,在该表上执行alter语句添加索引;
- 将表数据导入创建的新表;
- 修改新建的表名为原表名。
这种办法效率大幅提升
具体步骤
配置数据库参数
-
show variables like '%secure%';查看 secure-file-priv 当前的值是什么;
-
secure-file-priv为null表示禁止导出数据;
-
在my.ini配置文件中修改secure-file-priv参数;
-
secure-file-priv= ,设置为空表示不做限制,修改完成重启数据库服务。
创建新表
-
创建一张新表与要添加索引的表结构保持一致; CREATE TABLE 表名 LIKE 要复制的表名; (仅复制表结构)
- 创建需要添加的索引;alter table ha_person_info add index IDX_OUT_ORGAN_CODE (OUT_ORGAN_CODE);
导出数据文件
该步