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

要是数据量在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了

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇