我正在解析一个包含约 60 万行的 XML 文件。解析数据并将其从 XML 插入数据库不是问题,因为我使用 SAX 来解析并使用 LOAD DATA INFILE(从 .txt 文件)插入数据库。 txt 文件是使用 JDBC 在 Java 中填充的。所有这些都需要 5 秒钟才能填充到数据库中。
我的瓶颈现在正在执行多个 SELECT 查询。基本上,每次我点击某个 XML 标记时,我都会调用 SELECT 查询以从另一个数据库表中获取数据。添加这些 SELECT 查询使我的填充时间缩短到 2 分钟。
例如:
- 我正在解析由书籍、文章、论文等组成的 XML。
- 每本书/文章都有子元素,例如 isbn、书名、作者、编辑、出版商。
- 在每个作者/编辑/出版商处,我需要查询数据库中的一个表。
- 假设我遇到了值为 Tolkien 的作者标签。
- 我需要查询数据库中已存在的名为 author_table 的表
- 查询是 [select author_id from author_table where name = 'Tolkien']
这就是瓶颈发生的地方。
现在我的问题是:有没有办法加快速度?
顺便说一句,我认为 2 分钟很长的原因是因为这是一项家庭作业,我还没有完成数据库的填充。我估计整个数据库人口需要 5 分钟。这就是我寻求性能优化建议的原因。
最佳答案
您可以考虑以下几点:
- 使用connection pooling因此您不会在每次执行查询时都创建/关闭新连接。这样做很昂贵
- 缓存您通过 SELECT 查询获取的任何数据。是否可以预先预取所有数据,这样您就不必在现场查询它们?
- 如果您的 SELECT 速度很慢,请确保查询已优化并且您有适当的索引以避免扫描整个表
- 保证你use buffered IO in Java
- 您能否将工作分割为多个线程?如果是这样,请创建多个工作线程以并行执行您的工作的多个实例
关于java - 使用 Java 加速对 MySQL 的查询调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15079301/