file 选择的文件胖多有多大_[精选] 给一个线上环境的大数据表,如何给它加索引?...

591184cbaeb4c066428b48db4425db8f.gif

文章来自:https://blog.csdn.net/pengShuai007/article/details/86021689

商务合作: 请加微信 2230304070

精选文章正文

给一个线上环境的大表,如何给它加索引?

要是数据量在10几万以内,那你就可以直接用sql语句

ALTER TABLE table_name ADD INDEX index_name (column_list)

数据量过大时,直接执行加索引操作就会锁表,过大的表可能会达到数小时甚至导致服务崩溃.显然直接ALER表是不可取的。下面是解决该问题的方案

解决方案1

  • 出原表数据

  • 创建新表与原表结构保持一致,在该表上执行alter语句添加索引;

  • 将表数据导入创建的新表;

  • 修改新建的表名为原表名。

具体步骤

配置数据库参数

  • show variables like '%secure%';查看 secure-file-priv 当前的值是什么;

  • secure-file-priv为null表示禁止导出数据;

  • 在my.ini配置文件中修改secure-file-priv参数;

  • secure-file-priv= ,设置为空表示不做限制,修改完成重启数据库服务。

创建新表

1 创建一张新表与要添加索引的表结构保持一致; 

CREATE TABLE 表名 LIKE 要复制的表名; (仅复制表结构)

2 创建需要添加的索引;

alter table ha_person_info add index IDX_OUT_ORGAN_CODE (OUT_ORGAN_CODE);

导出数据文件

该步需要在数据库部署的服务器上进行

select * from tab into outfile 'D:/mysql/tab.txt';

注意:盘符后面跟的目录文件夹必须存在,否则报不能创建文件错误;斜杠如果为\,即 D:\mysql\tab.txt,则会在mysql安装目录下的data文件夹中创建一个mysqltab.txt的文件;

如果报错:

The MySQL server is running with the --secure-file-priv option so 
it cannot execute this statement 

则表示数据库参数secure-file-priv配置错误;

导入数据文件到新表

load data infile 'D:/mysql/tab.txt' into table tab;

上面是也就是临时表的处理方案,此方案在数据表保持不操作的情况下才能保持数据完整。也就是说此方案可能会损失少量数据

解决方案2,从库加,主从切换

首先你应该要对MySQL做读写分离配置,这一块看具体配置文章就好了:

如何搭建MySQL(双机热备)主从复制、读写分离

保持数据同步,然后从库中进行加字段/索引,在做主从切换数据就OK了

以上是本文的全部内容,希望对大家的学习有帮助,也希望大家多多支持php自学中心  31c1c6aa8426f898f6c736a68a6c6354.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值