当使用多个MySQL客户端运行时,为什么SQL import语句要快得多

时间:2014-11-16 18:25:33

标签: 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

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

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

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

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

测试在由this Xeon processor驱动的计算机上运行。

2 个答案:

答案 0 :(得分:1)

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

尝试以下

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

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

速度更快(开始时锁定一次)

答案 1 :(得分:0)

这可能是由于线程化,并且在多核系统上更加明显。并行处理事情会比一次处理事情更快。