Я уверен, что с моей стороны происходит что-то глупое.
У меня есть Java-приложение, где мне нужно постоянно запрашивать коллекцию из 2,5 миллионов объектов, поэтому я помещаю их вв памяти db.
Для этого я опробовал hsqldb v2.4.1 и h2 v1.4.198
Для обоих я использую одну и ту же таблицу создания:
String createRateTable = "CREATE MEMORY TABLE INTEREST_RATES " +
"(EFFECTIVE_DATE DATE not NULL, "
+ "INTEREST_RATE DOUBLE, "
+ "INTEREST_RATE_CD BIGINT, "
+ "INTEREST_RATE_TERM BIGINT, "
+ "INTEREST_RATE_TERM_MULT VARCHAR(50),"
+ "PRIMARY KEY (EFFECTIVE_DATE, INTEREST_RATE_CD, INTEREST_RATE_TERM, INTEREST_RATE_TERM_MULT))";
Единственное отличие - это соединение, я беру
con = DriverManager.getConnection("jdbc:h2:mem:ftp", "SA", "");
или
con = DriverManager.getConnection("jdbc:hsql:mem:ftp", "SA", "");
Например, часто запускаемый запрос:
SELECT *
from INTEREST_RATES
where INTEREST_RATE_CD = ?
and EFFECTIVE_DATE = (SELECT MIN(EFFECTIVE_DATE)
from INTEREST_RATES
where INTEREST_RATE_CD = ?)
Сейчас...
что касается Hsql, то приложение завершается примерно через 2 минуты.
что касается H2, оно все равно не выполняется через> 8 минут.
Что не так с моим H2настроить?Похоже, там нет созданных индексов, как это делает Hsql с помощью PRIMARY KEY ()?В чем еще может быть проблема?