[英]Java SQLite JDBC “SELECT” statement very slow
从一个API我得到〜9000项,我必须将它们插入表中。 这些条目中每一个的详细数据都存储在另一个表中,其中包含约45000个条目
现在,我试图将这9000个条目插入到新表中,并从另一个表中获取有关这些条目的所需信息。
带有45000个条目的表中数据的SELECT语句每次花费30-90ms。
选择的代码如下(重复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添加索引idx_id
( ID
);
但是30ms不应算慢,您可能要确保为ID
列创建了索引或索引,因为您在WHERE
条件下使用该列作为WHERE ID = ?
不,我的意思是如果您还没有在ID
列上创建唯一索引,请在下面说一遍,这将最终通过执行索引扫描来加快查询速度。
ALTER TABLE table_name ADD INDEX `idx_id` (`ID`);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.