0

大規模な OpenEdge テーブル (1 億行以上) を、できればプログラムで (c# で)、SSIS などの ETL ツールやテキスト ファイル抽出などのステージング形式の外部で読み取る最速の方法を見つける必要があります。

現在、ODBC (ドライバー: Progress OpenEdge 11.5) を使用して、OFFSET および FETCH 修飾子を使用してバッチで OpenEdge 11.5 テーブルをクエリしています。

SELECT COL_1, COL_2
FROM PUB.TABLE_1
ORDER BY ROWID ASC
  OFFSET {currentBatchStart} ROWS
  FETCH NEXT {batchSize} ROWS ONLY

と を使用してシステム DSN を介してクエリを実行していFetchArraySize: 25ますQueryTimeout: -1。そして、SQLのみのアクセス用に設定されたOpenEdgeサーバーグループに接続していますmessage buffer size: 1024.

パフォーマンスが悪い (15 分ごとに約 100 万レコード) ことに気付きました。OFFSET FETCH 修飾子を使用すると、テーブルを進めていくとパフォーマンスが低下するだけだと思います。

私の質問は、クエリのパフォーマンスを調整するために採用できる方法や操作できる設定はありますか?

  1. たとえば、SQL クエリを作成するためのより良い方法はありますか? たとえば、ROWID ではなく、インデックス内の列で並べ替える必要がありますか?
  2. SQL Server グループのメッセージ バッファ サイズを大きくする必要がありますか?

または、テーブルからデータを読み取る別の方法を検討する必要がありますか?


注: 各バッチは、その後sqlbulkcopySQL Server テーブルに変換されます

4

2 に答える 2