Java SQLite:如何在内存中加载现有数据库以更快地选择

时间:2018-02-18 18:17:56

标签: java sqlite

我有一个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)?

1 个答案:

答案 0 :(得分:0)

要加速许多小查询,请将它们包装在单个事务中,并使用带有更改参数的单个预准备语句。然后你应该能够使用一个只检查一个数字的简单SELECT。

或者,写下所有数字以检入临时表,并立即返回所有匹配的名称:

SELECT a
FROM MyTable
JOIN TempTable ON MyTable.b = TempTable.b;

在任何一种情况下,您都可以使用covering index来提高查找速度,即使用数字和名称的两列索引,或者更好地使用clustered index。< / p>