1

我在 Linux 机器(768MB RAM)上安装了 MySQL 5.1x 实例。我恢复了大约 1000 行的备份,并通过我的 .NET 应用程序(部署在不同的 Windows 网络服务器上)执行了某些读取操作,考虑到表没有索引,这些操作速度很快。

然后,我从这些行中清除了服务器,并在另一台服务器上的 Web 应用程序中使用了一个功能来插入行(基本上,我从文本文件中读取文本,将数据输入到自定义类的字段中,然后调用存储过程每个记录的这些参数)。当我在本地机器上同时拥有网站和数据库时,我会立即插入 2500 行(不到一秒)。然而,现在,在“生产”环境中,插入这些相同的 2500 行需要 10 分钟。我正在使用 MySQL 安装附带的默认 my.cnf。

有什么方法可以优化写入而不影响读取操作的速度?还是我错过了一些明显的东西?

提前致谢!

4

2 回答 2

2

您是否查看过 MySQL 手册页以了解插入速度?我想到的第一个猜测是您没有将这组 2500 个过程包装在Begin Transaction/Commit语句中,因此 MySQL 会自动提交 2500 个操作中的每一个。

于 2009-07-03T10:56:17.083 回答
1

除了 Mark 提到的问题(自动提交而不是事务),我肯定会使用批量更新进行调查。因为本地连接和网络连接(即使是非常快的连接)之间的一个主要区别是往返时间。

虽然在这种情况下带宽很可能不是限制因素,但是在网络上执行 2500 次往返数据库的网络往返肯定会比在本地计算机上花费更长的时间。

理想情况下,使用批量更新可以将这些插入减少到一次往返,而在实践中只需几次。

不幸的是,我无法告诉您如何在 .NET 世界中,在您使用的 Java 中进行这些批量更新PreparedStatement.addBatch()。我敢肯定.NET 中也有类似的东西。

于 2009-07-03T11:04:44.753 回答