导入两个数据集之后连接表的最有效方法

时间:2015-10-02 14:41:08

标签: mysql csv join

我创建了一张桌子' One'在mySQL上我从file111(csv)导入数据。它导入日期名称

我创建了一张桌子' Two'我从file222(csv)导入数据。它会导入旧名称新名称

请记住:

  

One.names = Two.old_names

我想要一张决赛桌会显示表格中的数据' One'但它会将旧名称替换为新名称

以下是关于表格创建的代码:

    -- Table creation : 'One'
    create table One(
    report_start date,
    name varchar(500)
    );

    -- Import of Data in the table 'One'
    LOAD DATA LOCAL INFILE 'C:/file111.csv'
    INTO TABLE One
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS
    ;

    -- Table creation with one column for the "old names" and one for the "new names" for "name" field.
    create table Two(
    old_name varchar(500),
    new_name varchar(500)
    );

    -- Import the OLD names and NEW names in the table 'Two'
    LOAD DATA LOCAL INFILE 'C:/file222.csv'
    INTO TABLE Two
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS
    ;

现在我有两个选择。一个是 INSERT INTO 创建后的第三个表。正如下图所示:

create table Three(
report_start date,
name varchar(500)
);

-- Our new table has all the data from 'One' except for the "name". The data will be imported in this column fields from the table "Two"
INSERT INTO Three (report_start, name)
SELECT report_start, Two.new_name 
FROM One
INNER JOIN Two ON Two.old_name = One.name
;

另一个选项是更新第一个表并使用JOIN:

update One 
join Two t on ( One.name = t.old_name )
set One.name=t.new_name;

它们的工作方式相同,但效率更高?我已经开始处理大量数据,因此我需要获得最有效和最安全的数据。

2 个答案:

答案 0 :(得分:2)

与大多数优化相关的问题一样,答案是:嗯,这取决于......

如果包含新名称的表明显小于第一个表,则更新很可能更有效。特别是如果你在names和old_names列上创建索引。

如果我是你,我会计算两种解决方案(每次多次)并使用最适合你的方法。

答案 1 :(得分:1)

你应该写第3张表,其表现方式相同或更好,风险方面更好。如果您想对其进行分析,您可以:

SET profiling=1;
run query
SET profiling=0;
SHOW profiles;

如果数据集很大,我还建议您索引连接表。