Mac OS X v10.4.11 を標準の Java (1.5.0_19) と付属の sqlite3 (3.1.3) で使用しています。(ええ、少し古いですが、以下のコメントを参照してください。)
「名前」と「保存された」テキスト列を持つ、数十万行のテーブルを持つsqlite3データベースがあります。Name は (これまでのところ) 6 つの短い文字列の 1 つです。stored は 19 文字の標準日時文字列です。各列には、スタンドアロンのインデックスがあります。一意の名前の値は 6 つだけです。次のクエリ:
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 の両方でこれを試しました。目に見える違いはありません。
これは既知の欠陥ですか?そうでない場合、誰かがそれを攻撃する方法を提案していますか?