Я использую Mac OS X v10.4.11 со стандартными версиями Java (1.5.0_19) и sqlite3 (3.1.3). ( Да, немного старенький ... но см. Комментарий ниже .)
У меня есть база данных sqlite3 с таблицей из нескольких сотен тысяч строк с текстовыми столбцами «имя» и «хранимые». Имя - одна из шести (пока) коротких строк; сохранена стандартная строка даты и времени из 19 символов. Каждый столбец имеет отдельный индекс. Есть только шесть уникальных значений имени. Следующий запрос:
select distinct name from myTable where stored >= date("now");
перечисляет соответствующие имена немедленно, когда я выполняю это через приложение Mac OS X «sqlite3». Но на поиск каждого имени уходит более 2 секунд (всего около 15 секунд), когда я делаю то же самое обычным способом в своем приложении:
String q = "SELECT DISTINCT name FROM myTable " +
"WHERE stored >= DATE('now');" ;
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(q);
while (rs.next()) {
final String s = rs.getString("symbol");
System.err.println("Got " + s);
}
rs.close();
}
Я пробовал это как с sqlitejdbc-v054, так и с sqlitejdbc-v055. Нет ощутимой разницы.
Это известный недостаток? Если нет, у кого-нибудь есть предложения, как его атаковать?