1

巨大なデータ テーブル (500 万レコードを含む可能性があります) から、独自の形式 (それぞれ 5000 レコードとしましょう) でいくつかのファイルを作成する必要があります。そして、この作品をマルチスレッドにしたいです。

では、1..5000 や 5001..10000 などのレコードを取得するためのクエリを効率的に作成するにはどうすればよいでしょうか。

select * from table where rownum<5000 and not exist (既にフェッチされたレコード) のようなものを形成できます。しかし、それは効率的なものではありません。

クエリを作成する最善の方法、またはファイルを作成する別の方法を提案してください。

4

2 に答える 2

1

Oracle 11g を使用している場合は、DBMS_PARALLEL_EXECUTE パッケージを使用して、プロシージャを複数のスレッドで実行できます。 詳細をご覧ください

以前のバージョンを使用している場合は、Tom Kyte の手法を使用して DIY 並列処理を実装できます。The Hungry DBA は、こちらのブログで適切な説明を提供しています。

于 2013-01-03T18:39:50.647 に答える
0

ページングを実装するには、MySqlLIMIT句を使用する一連のクエリが必要なようです (たとえば、クエリは最初の 1000 を取得し、別のクエリは 2 番目の 1000 を取得するなど)。

これらのクエリを作成し、スレッド数を設定しCallablesExecutor サービスに送信できます。Executorがスレッドを管理します。each 内でレコードのクエリと書き込みの両方を行う方が効率的かもしれないと思いますCallableが、これはおそらくテストが必要な仮定です。

于 2013-01-03T15:45:44.450 に答える