如何使远程MySQL连接更快?
我有一个Java应用程序,它解析文件并将我需要的数据存储在SQLite数据库中 我试图让它将数据存储在主机服务器上的远程MySQL数据库中 我重写了具有不同语法的查询,但仍然存在一个问题:它的速度比我在本地使用SQLite数据库时慢得多。是因为一个是本地的,另一个是远程连接,所以我不得不接受它,还是在继续之前我应该知道一些事情 例如,当我使用SQLite数据库时,解析636个文件并存储我需要的所有数据(有些数据是无用的,我必须对其中一些进行排序等)需要2.5分钟。这大约是每秒4.24个文件。平均来说,当我使用MySQL数据库时,每个文件大约需要15秒,因此使用MySQL数据库所需的时间是使用MySQL数据库的63倍 我认为主要的问题可能是什么,但我不知道如何解决它:每个文件平均有190个插入。由于这些文件是保龄球中心的统计表,每场比赛都是一行(每场比赛60名球员,每场比赛3场),再加上一些检查,看看联赛表、赛程表等中是否存在联赛,我真的不能少插入,因为所有的信息都很重要 我认为如果我能将游戏部分的所有插页组合在一个大插页中会有很大帮助,但我不知道这是否可能/如何可能/是否值得,或者问题是否在其他地方如何使远程MySQL连接更快?,mysql,remote-connection,Mysql,Remote Connection,我有一个Java应用程序,它解析文件并将我需要的数据存储在SQLite数据库中 我试图让它将数据存储在主机服务器上的远程MySQL数据库中 我重写了具有不同语法的查询,但仍然存在一个问题:它的速度比我在本地使用SQLite数据库时慢得多。是因为一个是本地的,另一个是远程连接,所以我不得不接受它,还是在继续之前我应该知道一些事情 例如,当我使用SQLite数据库时,解析636个文件并存储我需要的所有数据(有些数据是无用的,我必须对其中一些进行排序等)需要2.5分钟。这大约是每秒4.24个文件。平均
我想知道我是否至少在正确的轨道上,或者我是否应该习惯我的应用程序,因为它是远程连接的,所以我需要花那么多时间来存储数据。因为没有人回答,而且我发现我可以做些什么来提高性能,我将把它发布在这里,这样人们将来可以使用它,如果像我一样,他们不知道批次 我使用的是
PreparedStatement
s(但常规语句也会如此),而不是通常的ps.executeUpdate()
为了执行我的查询,我使用了ps.addBatch()代码>在不同查询之间,然后ps.executeBatch()代码>当我构建完查询并希望对批处理中的所有内容进行一次大插入时
请注意,执行此操作时,如果您的连接名为conn
,则应执行conn.setAutoCommit(false)开始批处理前的代码>和conn.commit()代码>在ps.executeBatch()之后代码>。如果愿意,您可以在此之后将“自动提交”设置回true。因为没有人回答,而且我发现我可以做些什么来提高性能,所以我将在这里发布它,以便将来人们在像我一样不知道批次的情况下可以使用它
我使用的是PreparedStatement
s(但常规语句也会如此),而不是通常的ps.executeUpdate()
为了执行我的查询,我使用了ps.addBatch()代码>在不同查询之间,然后ps.executeBatch()代码>当我构建完查询并希望对批处理中的所有内容进行一次大插入时
请注意,执行此操作时,如果您的连接名为conn
,则应执行conn.setAutoCommit(false)开始批处理前的代码>和conn.commit()代码>在ps.executeBatch()之后代码>。如果愿意,您可以在此之后将自动提交设置回true。是的,您可以进行批插入,如插入mytable(col1,col2)值(1,2)、(3,4)、(5,6)
。关于压缩,请阅读-@RomanNewaza,问题是,我将在同一行中有一行包含180组值,我想这不是什么大问题,但还有一个事实,即如果在前一行中出现错误,文件将重新加载新结果,则会有一个on DUPLICATE KEY UPDATE子句,我觉得批量插入会使其难以管理。我想值得一试,谢谢!顺便说一句,您可以尝试通过DB连接器设置压缩标志。是的,您可以进行批量插入,如插入mytable(col1,col2)值(1,2)、(3,4)、(5,6)
。关于压缩,请阅读-@RomanNewaza,问题是,我将在同一行中有一行包含180组值,我想这不是什么大问题,但还有一个事实,即如果在前一行中出现错误,文件将重新加载新结果,则会有一个on DUPLICATE KEY UPDATE子句,我觉得批量插入会使其难以管理。我想值得一试,谢谢!顺便说一句,您可以尝试通过DB连接器设置压缩标志。