我正在对 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/