mysql如何给大表加索引

   2022-09-07 11:55:41

mysql

给大表加索引: 1、创建一张和原表结构一样的空表,只是表名不一样 create table tb_name_tmp like tb_name; 2、把新建的空表非主键索引都删掉,因为这样在往新表导数据的时候效率会很快(因为除了必要的主键以外,不用再去建立其它索引数据了) alter tb_name_tmp drop index index_name; 3、从旧表往主表里导数据,如果数据太大,建议分批导入,只需确保无重复数据就行,因为导入数据太大,会很占用资源(内存,磁盘io, cpu等),可能会影响旧表在线上的业务。我是每批次100万条数据导入,基本上每次都是在 20s左右 insert into tb_name_tmp select * from tb_name where id between start_id and end_id; 4、数据导完后,再对新表进行添加索引 create index index_name on tb_name_tmp(column_name); 5、当大部分数据导入后,索引也建立好了,但是旧表数据量还是会因业务的增长而增长,这时候为了确保新旧表的数据一至性和平滑切换, 写一个脚本,判断当旧表的数据行数与新表一致时,就切换。可以用 max(id)来判断的。 rename table tb_name to tb_name_tmp1; rename table tb_name_tmp to tb_name;

相关评论:

靡不有初|  当前时间:  |  网站运行时间:  |鲜克有终

今年剩余【农历】:

粤ICP备19080315号