【发布时间】: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_cars和db_two_cars表都是InnoDB表,结构相同,car_id用作primary key,company_name用作multi-column key , customer 用作multi-column key。
我想加快这么大量的数据导入,也希望性能好在导入数据后查询表。
我的问题:
- 是否需要在我的 SQL 语句末尾添加
OPTIMIZE TABLE db_two_cars?为什么? (它会提高性能吗?我只是在插入数据) - 我需要使用
ALTER TABLE db_two_cars PACK_KEYS = 0 ?,为什么? (会不会提高性能) - 我还能做些什么来提高速度和未来的查询性能?
P.S.我所说的性能包括加快数据导入和未来数据查询的良好性能
【问题讨论】:
标签: mysql sql database indexing