你如何将3个MySQL数据库合并为1个数据库?

时间:2013-06-02 21:22:23

标签: mysql database

您如何将3个MySQL数据库合并为1个数据库?

在同一台服务器上,我有三(3)个网站,每个网站都有自己的MySQL数据库:

site1 - > database1,1表,16个字段

site2 - > database2,1表,16个字段

site3 - > database3,1表,16个字段

所有三个数据库都具有相同的结构,其中每个数据库只有一个包含16个字段的表。 在所有3个数据库中,表名相同(Post_Data),所有16个字段都相同。索引字段(字段11)名为Post_Date。

每个表包含超过1,000,000个条目。

我正在创建第4个网站,其中包含一个MySQL数据库(数据库4,1个表,16个字段),用作搜索网站,以执行搜索查询,显示其他3个数据库网站的结果。在第4个网站中,我目前正在运行一个脚本,它可以单独查询所有3个数据库并组合结果。然后,我从结果中删除重复项。

我认为这是以低效的方式对所有3个数据库执行搜索查询。我更喜欢只查询一个数据库,其中包含来自其他3个数据库的所有信息减去重复数据。

我的问题是:

如何将database1,database2和database3中的所有三个数据库表组合到database4中的单个表中? 此外,数据库4需要使用来自database1,database2和database3的数据进行数小时更新。我可以使用cron来执行更新。

我基本上是在寻找PHP / MySQL代码来执行此任务。

请记住,所有三个数据库都会有重复的条目。 换句话说,database1,database2和database3都可能包含一些相同的条目,因此我需要在将所有3个数据库表组合到database4中的单个表中时删除重复的条目。

由于第4个网站基本上是任何网站访问者都可以使用的搜索类型网站,因此我需要快速搜索响应,以最大限度地减少服务器上的负载。我当前的搜索方法(同时查询所有3个数据库并合并结果)会影响每个搜索查询的所有3个网站上的服务器负载。

关注:

  1. Database4不能包含来自database1,database2和database3的重复项。

  2. 我需要搜索网站快速搜索回复,以尽量减少服务器上的负载。

  3. 需要使用database1,database2和database3中的数据每小时更新Database4。我可以使用cron来执行更新。

  4. 之前我从未创建过搜索类型数据库。因此,我还需要在database4中加入一个额外的搜索索引字段吗?

1 个答案:

答案 0 :(得分:0)

每小时一次;

> USE database4

> CREATE TABLE temp AS 
     SELECT * FROM database1.Post_Data
     UNION
     SELECT * FROM database2.Post_Data
     UNION
     SELECT * FROM database3.Post_Data

> CREATE INDEX ix_post_date ON temp(Post_Date);

> RENAME TABLE Post_Data TO backup, temp TO Post_Data

当然,如果您的表格很大,您可能希望找到一种方法来更改时间戳,以便您可以逐步更新。