如何更快地建立远程MySQL连接?

时间:2012-03-05 06:53:26

标签: mysql remote-connection

我有一个Java应用程序,它解析文件并将我需要的数据存储在SQLite数据库中。

我正在尝试将数据存储在主机服务器上的远程MySQL数据库中。

我重写了具有不同语法的查询,但我仍然遇到问题:它比我在本地使用SQLite数据库时更慢。这是我必须要忍受的东西,因为一个是本地的而另一个是远程连接,或者在继续之前是否有我应该知道的东西?

作为一个例子,当我使用SQLite数据库时,解析636个文件并存储我需要的所有数据(一些数据是无用的,我必须对它进行排序等等)需要2.5分钟。这大约是每秒4.24个文件。平均而言,当我使用MySQL数据库时,每个文件大约需要15秒,因此使用MySQL数据库需要大约63倍。

我认为主要问题可能是什么,但我不知道如何解决它:每个文件平均有190个插入。由于这些文件是保龄球中心的统计表,每场比赛都是一排(每场联赛60名球员,3场比赛),加上一些检查联赛表,赛程表等联赛是否存在,我真的不能因为所有信息都很重要,所以只需少量插入。

我认为如果我可以将游戏部分的所有插入分组放在一个大插页中,那将会有很大的帮助,但我不知道这是否可能/如何可能/如果它甚至值得,或者问题是否在其他地方

我想知道我是否至少在正确的轨道上,或者我是否应该习惯我的应用程序,因为它是远程连接而花费那么多时间存储数据。

1 个答案:

答案 0 :(得分:0)

由于没有人回复答案而且我发现了我可以做些什么来提高性能,我将在这里发布,以便人们可以在将来使用它,如果像我一样,他们不知道批次

我正在使用PreparedStatement s(但是常规语句的工作方式相同),而不是通常ps.executeUpdate();来执行我的查询,我在不同的查询之间使用了ps.addBatch();然后ps.executeBatch();当我完成构建查询并想要批量生成一个大的INSERT。

请注意,执行此操作时,如果您的连接名为conn,则应在启动批处理前conn.setAutoCommit(false);conn.commit();之后ps.executeBatch();。然后,如果您愿意,可以在此之后将autoCommit设置为true。