Mysql 如何最好地合并四个大表

Mysql 如何最好地合并四个大表,mysql,merge,Mysql,Merge,我有4个较大的MYSQL表。 每个都有大约1000万行。 这些表只包含一个唯一的ID 某些表可能包含其他表中ID的重复项。我只想在最终合并表中保留其中一个 因此,基本上我需要导出所有4个表,并将它们合并到一个包含超过4000万行且没有重复项的大型表中 对于相对较大的文件,实现这一切的最佳方法是什么?? 我在phpmyadmin中导出/导入时遇到了限制,因此可能必须从命令行执行此操作。您可以执行四个“插入到”命令,或者UNION操作符也可以工作。您可以执行四个“插入到”命令,或者UNION操作符可

我有4个较大的MYSQL表。
每个都有大约1000万行。 这些表只包含一个唯一的ID

某些表可能包含其他表中ID的重复项。我只想在最终合并表中保留其中一个

因此,基本上我需要导出所有4个表,并将它们合并到一个包含超过4000万行且没有重复项的大型表中

对于相对较大的文件,实现这一切的最佳方法是什么?? 我在phpmyadmin中导出/导入时遇到了限制,因此可能必须从命令行执行此操作。

您可以执行四个“插入到”命令,或者UNION操作符也可以工作。

您可以执行四个“插入到”命令,或者UNION操作符可以工作,也一样。

MySql确实有一个可以让您愉快地一个接一个地从所有表中插入的功能。DBMS将负责(在丢弃的意义上)重复项

这可能不是最有效的选择,但我认为这将是一次操作。

MySql确实有这样一个选项,允许您愉快地从所有表中逐个插入。DBMS将负责(在丢弃的意义上)重复项


这可能不是最有效的选项,但我假设它是一次性操作。

将这4个表定义为每个表的ID都是唯一的主键。
然后简单地对所有4个表进行外部联接

将这4个表定义为每个表的ID都是唯一的主键。
然后简单地对所有4个表进行外部联接

正如其他人所提到的,MySQL支持
INSERT IGNORE…
选项,这意味着尝试插入,但对于每一行,如果它与唯一键冲突(或导致另一个错误,如NOTNULL或外键检查失败),它只需跳过该行,然后插入下一行

您可能知道MySQL附带的
mysqldump
工具。它有一个使用
INSERT IGNORE
语法导出数据的选项

您还需要省略CREATE TABLE,因为如果要将四个数据集导入到同一个目标表中,则不需要四次创建该表

下面是我的建议:

在其中一台服务器上,仅获取表定义。如果它们都是相同的,那么从哪个服务器获取这些信息并不重要:

mysqldump --no-data mydatabase mytable > create.sql
然后仅从四台服务器中的每台服务器获取数据:

mysqldump --no-create-info --insert-ignore mydatabase mytable > data1.sql
(同样适用于data2.sql、data3.sql、data4.sql,每台服务器一个)

将转储文件复制到要合并数据的服务器

创建表:

mysql mydestdatabase < create.sql

我喜欢使用
pv-pert
,因为它显示一个进度条。您可能必须安装
pv
,因为它在大多数系统上默认不存在。如果您不想这样做,只需使用
cat

,正如其他人所提到的,MySQL支持
INSERT IGNORE…
选项,这意味着尝试插入,但对于每一行,如果它与唯一键冲突(或导致另一个错误,如NOTNULL或外键检查失败),它只是跳过该行,然后插入下一行

您可能知道MySQL附带的
mysqldump
工具。它有一个使用
INSERT IGNORE
语法导出数据的选项

您还需要省略CREATE TABLE,因为如果要将四个数据集导入到同一个目标表中,则不需要四次创建该表

下面是我的建议:

在其中一台服务器上,仅获取表定义。如果它们都是相同的,那么从哪个服务器获取这些信息并不重要:

mysqldump --no-data mydatabase mytable > create.sql
然后仅从四台服务器中的每台服务器获取数据:

mysqldump --no-create-info --insert-ignore mydatabase mytable > data1.sql
(同样适用于data2.sql、data3.sql、data4.sql,每台服务器一个)

将转储文件复制到要合并数据的服务器

创建表:

mysql mydestdatabase < create.sql

我喜欢使用
pv-pert
,因为它显示一个进度条。您可能必须安装
pv
,因为它在大多数系统上默认不存在。如果您不想这样做,只需使用
cat

这4个表都位于不同的服务器上。我需要转储/导出它们。那么,如何导入它们,但同时合并?或者我只是做了四个独立的插入,重复的ID将被忽略??因为它们是独一无二的?你已经在做转储/导出。。。在导入之前,您能做些什么来删除重复项吗?这4个表都在不同的服务器上。我需要转储/导出它们。那么,如何导入它们,但同时合并?或者我只是做了四个独立的插入,重复的ID将被忽略??因为它们是独一无二的?你已经在做转储/导出。。。在导入之前,您能做些什么来删除重复项吗?它们都在不同的服务器上。我不想将它们导入到与单独表相同的数据库中,然后加入。最好我想在一次手术中完成。将它们合并/同时插入到最后一个表中。我该怎么做呢??就像我将mysqldumped到SQL文件中之后一样,在插入之前是否有合并/加入它们的命令?或者,唯一的方法是分别插入所有数据,然后加入?它们都位于不同的服务器上。我不想将它们导入到与单独表相同的数据库中,然后加入。最好我想在一次手术中完成。将它们合并/同时插入到最后一个表中。我该怎么做呢??就像我将mysqldumped到SQL文件中之后一样,在插入之前是否有合并/加入它们的命令?或者,唯一的方法是单独插入所有,然后加入?