jdbc:odbc ブリッジを使用して Access データベースに接続しています。次に、データベースから大量のデータ (約 200 万行) を選択します。再起動後に初めてコードを実行すると、非常に遅くなり、データの取得に 6 分以上かかります。その後の実行では、同じことを行うのに 1.5 分しかかかりません。
これは、データベースへの接続に使用しているコードです。
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + databaseLocation + databaseName + ";selectMethod=cursor; READONLY=true; TYPE=FASTLOAD";
con = DriverManager.getConnection(url);
System.out.println("Connected to " + databaseName);
} catch (SQLException e) {
System.out.println("SQL Exception: " + e.toString());
} catch (ClassNotFoundException cE) {
System.out.println("Class Not Found Exception: " + cE.toString());
}
多くのグーグルの後、次のようなパラメーターを追加しようとしました
selectMethod=cursor
READONLY=true
TYPE=FASTLOAD
私が見る限り、これらのどれも違いはありませんでした。
次に、次のようにデータを選択します。
String SQL = "SELECT ADDRESS_MODEL.ADDR_LINE_1, ADDRESS_MODEL.ADDR_LINE_2, LOCALITIES.NAME, ADDRESS_MODEL.SECONDARY_LOCALITY, TLANDS.NAME, ADDRESS_MODEL.POST_TOWN, ADDRESS_MODEL.COUNTY FROM ((ADDRESS_MODEL LEFT JOIN BUILDINGS ON ADDRESS_MODEL.BUILDING_ID = BUILDINGS.BUILDING_ID) LEFT JOIN LOCALITIES ON BUILDINGS.LOCALITY_ID = LOCALITIES.LOCALITY_ID) LEFT JOIN TLANDS ON BUILDINGS.TLAND_ID = TLANDS.TLAND_ID WHERE BUILDINGS.COUNTY_ID = " + county_ID;
PreparedStatement prest = con.prepareStatement(SQL);
ResultSet result = prest.executeQuery();
準備済みステートメントを使用してみましたが、正しく実行したかどうかわかりません。
データを保存したら、ResultSet を閉じます。
result.close();
プログラムの後半で、次のように接続を閉じます。
try{
stmt.close();
con.close();
System.out.println("Connection to " + databaseName + " closed");
} catch (SQLException e) {
System.out.println("SQL Exception: " + e.toString());
}
残念ながら、現時点では Java と Access の両方を使用することに専念しています。
初めて遅い理由を知っている人はいますか (または、その後の実行で速い理由)? また、高速化するために私が改善できる一般的なことはありますか?
御時間ありがとうございます。