【问题标题】:Performance issue: Data importing in database性能问题:数据库中的数据导入
【发布时间】:2012-01-05 11:48:07
【问题描述】:

我正在使用 MySQL v5.1

我的简单场景是我想将大量数据从一个数据库中的表导入到另一个数据库中的另一个表。而另一个数据库中的表(要插入数据的地方)将首先被截断。

具体来说,假设我有两个数据库,分别命名为“db_one”和“db_two”。

db_one 有一个名为 db_one_cars 的表,其中包含 6,000,000 条记录(数据量很大)。而 db_two 有一个名为 db_two_cars 的表,其中也包含大量数据。

我将首先删除db_two_cars中的所有数据(截断表格),然后导入 db_one_cars中的所有数据 db_two_cars。 (注:两张表分别在两个数据库中)。

所以,我创建了一个 sql 文件,其内容如下:

TRUNCATE TABLE db_two_cars;

ALTER TABLE db_two_cars DISABLE KEYS;

INSERT INTO db_two_cars  (car_id, name, customer, company_name)
SELECT id, CONCAT('c-', name), customer, company_name FROM db_one.db_one_cars;

ALTER TABLE db_two_cars ENABLE KEYS;

db_one_carsdb_two_cars表都是InnoDB表,结构相同,car_id用作primary keycompany_name用作multi-column key , customer 用作multi-column key

我想加快这么大量的数据导入,也希望性能好在导入数据后查询表。

我的问题:

  1. 是否需要在我的 SQL 语句末尾添加OPTIMIZE TABLE db_two_cars?为什么? (它会提高性能吗?我只是在插入数据)
  2. 我需要使用ALTER TABLE db_two_cars PACK_KEYS = 0 ?,为什么? (会不会提高性能)
  3. 我还能做些什么来提高速度和未来的查询性能?

P.S.我所说的性能包括加快数据导入和未来数据查询的良好性能

【问题讨论】:

    标签: mysql sql database indexing


    【解决方案1】:

    为了改善这一点,将数据导出到 csv 文件

    并使用以下方法将该文件加载到新表中:

    load data infile

    另一个加快速度的技巧你可以看看这个answer

    【讨论】:

    • 你的意思是加载数据文件比我使用的方式快得多?那么如何处理索引呢?
    • 关于索引的处理见这个:stackoverflow.com/questions/827445/…
    • 我仍然对我的第一个和第二个问题感兴趣,尽管加载数据文件可能是一个不错的选择。如果有人也可以提供我前两个问题的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2012-11-21
    • 2012-05-30
    相关资源
    最近更新 更多