【发布时间】:2015-12-14 10:40:38
【问题描述】:
从一个 API 中,我得到了大约 9000 个条目,我必须将它们插入到一个表中。每个条目的详细数据都存储在另一个包含约 45000 个条目的表中
现在我正在尝试将这 9000 个条目插入到一个新表中,并从另一个表中获取有关这些条目的所需信息。
表中包含 45000 个条目的数据的 SELECT 语句每次需要 30-90 毫秒。
select的代码如下(重复9000次):
long startTime = System.nanoTime();
PreparedStatement selectDB = cStatic.prepareStatement("SELECT column1, column2, column3, column4 FROM DB WHERE ID = ?");
selectDB.setInt(1, rsIDs.getInt(3));
ResultSet rsDB = selectDB.executeQuery();
long endTime = System.nanoTime();
long duration = (startTime - endTime) / 1000000;
从整个过程(收集信息、插入)来看,SELECT + ResultSet 单独占用了 95% 的处理时间,我想知道如何加快速度
由于我已经搜索了解决方案,因此我已经在使用结果集中的“getInt/getString”索引,并且只调用表的所需列而不是整行,但只有很小的改进。
其他语句(UPDATE、INSERT、DELETE)几乎都用不到 1ms,为什么 SELECT 需要这么多时间?
编辑:
并没有真正加快 SELECT 的速度,但我正在重建代码以仅使用 SELECT 一次并将所有重要数据存储到一个数组中,现在它在 2-3 秒内完成,而不是 5 分钟。
感谢 Rahul,我尝试为列提供索引,这也有所帮助:
ALTER TABLE table_name ADD INDEX idx_id (ID);
【问题讨论】:
-
约 30 毫秒对您来说有那么慢吗? Select 需要返回结果集,其他查询不需要...
-
嗯,在我的过程中,我正在构建第二个表,其中包含约 9000 个条目,这些需要来自第一个表的数据。 9000 * 30ms 大约是 4.5 分钟,这对我来说确实很多,考虑到插入 200.000 个条目会在几秒钟内发生......
-
所以你的实际问题是构建另一个表的速度很慢?您应该编辑问题以反映这一点。 逐行做事总是很慢。与其运行多个
SELECTs,不如在一个语句中完成所有操作(SELECT和INSERT)。 -
我现在将其更改为只对所有内容使用一个选择,是的,它工作得很好,谢谢
标签: java performance sqlite select jdbc