Mysql decenas de millones de niveles de optimización de subtabla

Demanda: a medida que aumenta la cantidad de datos, una sola tabla ya no puede soportar bien el negocio, y la consulta de decenas de millones de datos es lenta

Esquema de optimización de datos Mysql:

  1. Solución 1 : use myisam para optimizar la tabla de niveles
  2. Opción 2 : usar la optimización de partición mysql

Uno: partición horizontal Myisam

1. Cree una tabla de nivel usuario_1:

--  创建水平分表
create table user_1(
	id varchar(50) PRIMARY key COMMENT '主键id',
	user_name varchar(50) DEFAULT null COMMENT '用户名称',
	creator varchar(50) DEFAULT null COMMENT '创建者',
	create_date datetime DEFAULT null COMMENT '创建时间',
	updater varchar(50) DEFAULT null COMMENT '更新者',
	update_date datetime DEFAULT null COMMENT '更新时间'
)ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户1表';

2. Cree una tabla de niveles user_2:

create table user_2(
	id varchar(50) PRIMARY key COMMENT '主键id',
	user_name varchar(50) DEFAULT null COMMENT '用户名称',
	creator varchar(50) DEFAULT null COMMENT '创建者',
	create_date datetime DEFAULT null COMMENT '创建时间',
	updater varchar(50) DEFAULT null COMMENT '更新者',
	update_date datetime DEFAULT null COMMENT '更新时间'
)ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户2表';

3. Crear un usuario de tabla horizontal

 --  创建总表
create table user(
	id varchar(50) PRIMARY key COMMENT '主键id',
	user_name varchar(50) DEFAULT null COMMENT '用户名称',
	creator varchar(50) DEFAULT null COMMENT '创建者',
	create_date datetime DEFAULT null COMMENT '创建时间',
	updater varchar(50) DEFAULT null COMMENT '更新者',
	update_date datetime DEFAULT null COMMENT '更新时间'
)ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=(
`user_1`,`user_2`);

4. Nueva partición agregada user_3

create table user_3(
	id varchar(50) PRIMARY key COMMENT '主键id',
	user_name varchar(50) DEFAULT null COMMENT '用户名称',
	creator varchar(50) DEFAULT null COMMENT '创建者',
	create_date datetime DEFAULT null COMMENT '创建时间',
	updater varchar(50) DEFAULT null COMMENT '更新者',
	update_date datetime DEFAULT null COMMENT '更新时间'
)ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户3表';

Inicializar datos 

--  插入数据
insert into user_1(`id`,`user_name`,`create_date`,`update_date`) values ('1','张三',now(),now());
insert into user_1(`id`,`user_name`,`create_date`,`update_date`) values ('2','李四',now(),now());
insert into user_2(`id`,`user_name`,`create_date`,`update_date`) values ('1','王五',now(),now());
insert into user_3(`id`,`user_name`,`create_date`,`update_date`) values ('3','赵六3',now(),now());
insert into user(`id`,`user_name`,`create_date`,`update_date`) values ('4','老赵1',now(),now());

Verificar resultados de datos: pasar

 

5. Vuelva a agregar la partición

alter table user UNION=(`user_1`,`user_2`,`user_3`);

Descripción del parámetro 

1:分表ENGINE必须为:MyISAM,总表必须为MRG_MyISAM
2:INSERT_METHOD:向总表插入数据默认到哪个位置取值:
       0:不允许插入
       1:允许插入
       FIRST:merge的第一张表
       LAST:merge的最后一张表

Se produjo un error anormal

1168 - Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist

 Localización del problema:

  •  El motor MERGE de subtabla solo es adecuado para tablas MYISAM
  • Union tiene una tabla que no existe o no está en la misma base de datos
  • La estructura de la tabla es inconsistente.

Dirección oficial del sitio web: https://dev.mysql.com/doc/refman/8.0/en/merge-storage-engine.html

Publicado 25 artículos originales · Me gusta9 · Visita 460,000+

Supongo que te gusta

Origin blog.csdn.net/qq_31150503/article/details/105450236
Recomendado
Clasificación