性能问题:数据库中的数据导入

时间:2011-11-24 09:35:57

标签: mysql sql database indexing

我正在使用 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_cars db_two_cars 表都是InnoDB表并具有相同的结构,car_id用作primary keycompany_name用作multi-column keycustomer用作multi-column key

我希望加速进行大量数据导入,并且还希望良好的性能在压缩数据后查询表。

我的问题:

  1. 我的SQL语句结尾需要OPTIMIZE TABLE db_two_cars吗?为什么? (它会改善性能吗?我只是插入数据)
  2. 我需要使用ALTER TABLE db_two_cars PACK_KEYS = 0 ?吗?为什么? (它会改善表现)
  3. 我还可以采取哪些其他措施来提高速度和未来的查询效果?
  4. P.S。我的意思是包括加快数据导入速度和未来数据查询的良好性能

1 个答案:

答案 0 :(得分:1)

要改进这一点,请将数据导出到csv文件

并使用以下命令将此文件加载到新表中:

load data infile

另一个加快此速度的提示你可以查看这个answer