我有一个sqlite数据库,我从java程序查询,没有插入,没有表创建,只有许多SELECT与UNION捆绑(一次500个)。 如何将数据库从.db加载到内存中以加速SELECT?
Class.forName("org.sqlite.JDBC");
String urlJDBC = "jdbc:sqlite:";
String url = urlJDBC + dbPath;
Connection conn = null;
try {
conn = DriverManager.getConnection(url);
} catch (SQLException e) {
System.out.println(e.getMessage());
}
for(int i=0, i<10000, i++)
{
String multipleSELECT = "SELECT a FROM table WHERE b=\"" + b1 + "\"" + "
UNION ... + " UNION SELECT a FROM table WHERE b=\"" + b500 + "\"";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(multipleSELECT);
check(rs);
}
显然,在i的每次迭代中,b的500个值都会发生变化。
有没有办法在内存中加载整个数据库(大约2.5 GB,所以低于8 GB ram)?
答案 0 :(得分:0)
要加速许多小查询,请将它们包装在单个事务中,并使用带有更改参数的单个预准备语句。然后你应该能够使用一个只检查一个数字的简单SELECT。
或者,写下所有数字以检入临时表,并立即返回所有匹配的名称:
SELECT a
FROM MyTable
JOIN TempTable ON MyTable.b = TempTable.b;
在任何一种情况下,您都可以使用covering index来提高查找速度,即使用数字和名称的两列索引,或者更好地使用clustered index。< / p>