mysql - 性能问题: Data importing in database

标签 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_carsdb_two_cars表都是InnoDB表,并且具有相同的结构,car_id用作主键company_name用作多列键customer用作多列键

我希望加快如此大量的数据导入速度,并且还希望在导入数据后能够良好的性能查询表。

我的问题:

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

P.S.我所说的性能包括数据导入的速度以及 future 数据查询的良好性能

最佳答案

要改进此功能,请将数据导出到 csv 文件

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

load data infile

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

关于mysql - 性能问题: Data importing in database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8254839/

相关文章:

php - WHERE NOT IN 命令在 PHP 中不起作用,但在 SQL 中起作用

sql - 回滚后提交事务

MySQL:可以从信息模式中提取存储过程信息吗?

MySQL - ORDER BY 子句导致 SQL_CALC_FOUND_ROWS 选择不返回数据

mysql - 使用来自单独表的数据的 SQL JOIN

MySQL查询以列出我发过消息或收到过消息的 friend

sql - 数据库查询应该放在哪里?

mysql - 使用 MySql 外键连接 2 个表

mysql - 在mysql中创建带有事务的过程

sql - 使用两个参数的 VB.net 搜索查询