我需要签入数据库存在~2k记录,我测试数据库大小1.000.000的id,需要46秒。太长了,因为将来这个数据库可能会有超过500000条记录。有什么方法可以加快db的搜索速度吗?我在java中使用jdbc,代码如下:
public int search(List<String> toSearch) throws SQLException {
String query = "SELECT * FROM strings where string = ?";
StringBuilder sB = new StringBuilder(query);
for (int i=0; i<toSearch.size()-1; i++) {
sB.append("OR string=?");
}
System.out.println(toSearch.size());
PreparedStatement prep = con.prepareStatement(sB.toString());
int i=1;
for (String string : toSearch) {
prep.setString(i, string);
i++;
}
long data = System.currentTimeMillis();
ResultSet resultSet = prep.executeQuery();
long data2 = System.currentTimeMillis();
System.out.println((data2 - data) / 1000);
List<String> toReturn = new ArrayList<>();
while (resultSet.next()) {
toReturn.add(resultSet.getString("string"));
}
return toReturn.size();
}
表名是字符串,列字符串。
1条答案
按热度按时间klsxnrf11#
首先,你需要有一个索引
string
列。不要为h2构造参数数目可变的查询。使用
如果您使用一些旧的不受支持的h2版本,请使用它的
TABLE()
改为按照随您的版本分发的文档中所述的方式运行(Prepared Statements and IN(...)
pdf格式)。对于其他dbms,您可能需要其他技巧来避免动态生成sql代码,
= ANY(?)
将在postgresql及其forks和h2中工作,但在其他dbms中不工作。