1

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 の両方を使用することに専念しています。

初めて遅い理由を知っている人はいますか (または、その後の実行で速い理由)? また、高速化するために私が改善できる一般的なことはありますか?

御時間ありがとうございます。

4

1 に答える 1

0

200 万行とおっしゃいましたが、データの大きさはどれくらいですか? 初めてディスクからすべてを読み込んで、その後の実行のためにディスクキャッシュに入れる可能性は十分にあります。データセット全体が一度に RAM に収まらない場合でも、主要なデータ構造がまだ存在する可能性があります。

于 2012-07-18T12:37:07.803 に答える