Java SQLite JDBC“SELECT”语句很慢

时间:2015-09-17 14:06:31

标签: java performance sqlite select jdbc

从API我得到~9000个条目,我必须插入到表中。每个条目的详细数据存储在另一个包含~45000个条目的表中

现在我尝试将这9000个条目插入到新表中,并从另一个表中获取有关这些条目的所需信息。

表中包含45000个条目的数据的SELECT语句每次需要30-90毫秒。

选择的代码如下(重复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;

从整个过程(收集信息,iserting),SELECT + ResultSet单独占用95%的处理时间,我想知道如何加快速度

由于我已经搜索过解决方案,我已经在结果集中使用了“getInt / getString”的索引,并且只调用了表中所需的列而不是整行,但只是一个很小的改进。

每个其他语句(UPDATE,INSERT,DELETE)甚至几乎不使用1ms,为什么SELECT需要这么多时间?

编辑:

没有真正加速SELECT,但我正在重建代码只使用SELECT一次并将每个重要数据存储到一个数组中,现在它在2-3秒而不是5分钟内完成。

感谢Rahul,我尝试给列添加一个索引,它也有点帮助:

ALTER TABLE table_name ADD INDEX idx_idID);

1 个答案:

答案 0 :(得分:0)

30毫秒不应该算得慢,你可能想要确保为ID列创建索引或索引,因为你在WHERE中使用了该列条件为WHERE ID = ?

不,我的意思是在ID列上创建一个唯一索引,如果您还没有在下面说过,那么最终会通过执行索引扫描来加快查询速度。

ALTER TABLE table_name ADD INDEX `idx_id` (`ID`);