2

H2 データベースを使用しており、組み込みモードで実行しています。アプリの起動時に、H2 データベースに mySQL データベースからのデータをロードします。リンクされたテーブルを使用して、mySQL テーブルを指しています。

私の問題は、特に大きなテーブル (500 万以上) の場合、H2 がテーブルにインデックスを作成するのにかかる時間を短縮しようとしていることです。

次のテーブルのデータを H2 にロードしているときに、別のスレッドで CREATE INDEX コマンドを実行しても安全かどうかは誰にもわかりませんか? 例: スレッド 1: テーブル 1 をロード -> スレッド 2 にインデックスの作成を開始するように指示し、次にスレッド 1 がテーブル 2 をロードします。

後で選択を行うときに MULTI_THREADED モードを使用する必要があるため、テーブルをロードするときに MVCC モードを使用できません。MULTI_THREADED モードを使用しようとすると、個別のテーブルにデータをロードしていたにもかかわらず、ロック エラーが発生しました。

どうもありがとう!

4

3 に答える 3

2

最初にテーブルとインデックスを作成し、次にテーブルを並行してロードすることがうまくいくかもしれません (しかし、それがより速いかどうかはわかりません)。これにより、システム テーブルでのロックの問題が回避されます。

于 2013-02-15T08:49:02.103 に答える
0

また、メソッド rst.findColumn("columnName") を追加して、テーブルの結果セットを取得した後にインデックスを見つけたいと思います。rst は ResultSet オブジェクトです。これは私が使用したものです。

于 2013-04-05T09:38:47.113 に答える