mysql - 为什么 SQL 导入语句在与多个 MySQL 客户端一起运行时速度更快

标签 mysql sql innodb

我正在对 mysql 数据库进行一些性能测试。所有表都使用InnoDB引擎,mysql配置几乎是默认配置,没有设置特殊标志。

我有一个包含 64 000 个 SQL INSERT 的 test.sql 文件,它们在 INSERT INTO TableName(column1, column2) VALUES (value1, value2) 中声明。格式。

我通过在命令提示符中执行以下行来在 mysql 客户端上运行此 sql 文件: mysql -u username -ppassword db_name < test.sql

执行此操作时,文件的执行在一分钟内完成。 在下一步中,我将 64 000 条语句分成两个文件,每个文件包含 32 000 行。在 .bat 文件中,我打开两个 mysql客户端同时运行,一个运行包含第一部分的文件,另一个运行另一个文件。执行时间降至 34 秒。

所以我又做了几次,时间急剧下降。通过向每行添加时间戳并减去最小值来完成测量。最大时间戳时间戳。

  • 1 - 58 秒
  • 2 - 34 秒
  • 4 - 18.5 秒
  • 8 - 14.68 秒
  • 16 - 9.79 秒
  • 32 - 9.14 秒

在开始测量之前,我的猜测是,运行任意数量的文件,如果总计数保持不变,则所有情况下的总时间几乎相同。 我对加快整个导入速度并不感兴趣,我很好奇是什么让时间下降这么多?

测试在 this Xeon processor 驱动的机器上运行.

最佳答案

它可以更快,因为每个线程锁定索引的不同部分。

尝试以下

echo "begin;" >/tmp/begin
echo "commit;">/tmp/commit

cat /tmp/begin test.sql /tmp/commit |mysql -u username -ppassword db_name 

速度更快(开始时锁定)

关于mysql - 为什么 SQL 导入语句在与多个 MySQL 客户端一起运行时速度更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26960467/

相关文章:

mysql - WordPress 数据库错误 Lock wait timeout exceeded;尝试重新启动查询 UPDATE wp_wppa_session 的事务

sql - 计算MySQL中的总持续时间

mysql - 更新/更改具有约 550 万行(TINYINT 到 SMALLINT)的 MySQL 表中列的数据类型的最佳和最安全的方法是什么?

mysql - 加密电子邮件在 mysql InnoDB 中应该有什么类型和大小?

php - SQL 按日期和时间排序不起作用

mysql - 从数据透视表中检索与所有结果匹配的记录

c# - 有什么方法可以使 EntityFramework 的 SaveChanges() 方法跳过一个条目(如果它已经存在)?

MySQL 子查询作为表(用于多列返回)

php - 有没有办法在 doctrine2 中使用 mysql 二元运算符?

MYSQL外键到同一个表?