我正在使用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
用作主键
,company_name
用作多列键
,customer
用作多列键
。
我希望加快如此大量的数据导入速度,并且还希望在导入数据后能够良好的性能查询表。
我的问题:
- 是否需要在 SQL 语句末尾添加
OPTIMIZE TABLE db_two_cars
?为什么? (它会提高性能吗?我只是插入数据) - 我需要使用
ALTER TABLE db_two_cars PACK_KEYS = 0 吗?
为什么? (会提高性能吗) - 我还可以采取哪些措施来提高速度和 future 的查询性能?
P.S.我所说的性能包括数据导入的速度以及 future 数据查询的良好性能
最佳答案
关于mysql - 性能问题: Data importing in database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8254839/