从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_id
(ID
);
答案 0 :(得分:0)
30毫秒不应该算得慢,你可能想要确保为ID
列创建索引或索引,因为你在WHERE
中使用了该列条件为WHERE ID = ?
不,我的意思是在ID
列上创建一个唯一索引,如果您还没有在下面说过,那么最终会通过执行索引扫描来加快查询速度。
ALTER TABLE table_name ADD INDEX `idx_id` (`ID`);