java - 使用 Java 加速对 MySQL 的查询调用

标签 java mysql database jdbc

我正在解析一个包含约 60 万行的 XML 文件。解析数据并将其从 XML 插入数据库不是问题,因为我使用 SAX 来解析并使用 LOAD DATA INFILE(从 .txt 文件)插入数据库。 txt 文件是使用 JDBC 在 Java 中填充的。所有这些都需要 5 秒钟才能填充到数据库中。

我的瓶颈现在正在执行多个 SELECT 查询。基本上,每次我点击某个 XML 标记时,我都会调用 SELECT 查询以从另一个数据库表中获取数据。添加这些 SELECT 查询使我的填充时间缩短到 2 分钟。

例如:

  1. 我正在解析由书籍、文章、论文等组成的 XML。
  2. 每本书/文章都有子元素,例如 isbn、书名、作者、编辑、出版商。
  3. 在每个作者/编辑/出版商处,我需要查询数据库中的一个表。
  4. 假设我遇到了值为 Tolkien 的作者标签。
  5. 我需要查询数据库中已存在的名为 author_table 的表
  6. 查询是 [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/

相关文章:

java - HashMap 如何以及何时初始化 EntrySet 并向其中添加值

php - 数组数据计算

PHP 连接到 Amazon EC2

database - 在索引数据库中升级数据库版本时,在 firefox 操作系统中会出现错误。 "A request was aborted, for example through a call to IDBTransaction.abort."

java - 尝试用java以奇怪的方式显示随机卡

java - 如何在iText7中为单个页面设置页面标签?

MySQL加入多对多单行

mysql限制作为子查询

mysql - 当我指定选择前 10 行时,有什么方法可以阻止 MySQL 读取整个表吗?

java - 可下载应用程序中的不同语言