質問: 私は選択的に(行と列の両方)1つのテーブルから別のテーブルに2000万行をエクスポートする必要があります。これは私が試したものです: ``` --Run this in batch: INSERT INTO Table 2 Select A, B from Table1 where A > a and B < b ---Table1 have columns A, B....Z and got around 50 million records. ``` 終了には約12時間かかります。 sybaseは、Table1からの選択的な列と行とbcpからTable2へのbcpを可能にするとは思わない。使用できる代替アプローチがありますか? 4時間未満で済むと幸いです。 それを読んでくれてありがとう。
回答: 私はあなたが意味すると思う: ``` WHERE PK > start_value AND PK < end_value ``` 同じサーバー上の2つのテーブルにデータを複製する正当な理由はないので、テーブルが別々のサーバーにあることを願っています。あなたが "アーカイブ"している場合は、それは間違ったことです。代わりにテーブルの速度を向上させる。 この投稿を参照してください。 1. そのINSERT-SELECTは、トランザクションログを終了させます。トランザクションログは徐々に実行され、他のユーザーがdbを使用できなくなります。 1000行のバッチに分割すると、より高速でより社交的になります。 *4時間未満で済むと嬉しいです* 2. 問題ないはずです。ハードウェアとディスクのレイアウトによって異なります。 ASE 15.5を実行している私の小さなデモボックスで、13.2秒で1600万行をロードできます。 3. bcpは、次のような条件に応じて自動的に2つのモードで実行されます。 * FAST。これにはSELECT_INTO / BULK_COPY sp_dboptionを設定する必要があります。これにより、bcpはINSERTをログに記録せず、割り当てのみをログに記録することができます。また、テーブルのインデックスを削除する必要があります(bcpの終了後に作成できます)。 * スロー。いずれの条件も満たされていません。すべてのINSERTがログに記録されます。ログにダンプするしきい値があることを確認します(満たされます)。 4. out_data_fileまたはTable_2がTable_1の列のサブセットであることはまったく問題ありません。 Table_2のビューをTable_1サーバーに作成します。ビューをBcpアウトします。ビューにWHERE句を配置したり、変換などを行うこともできます 5. exec bcpを並列に実行することができます(ホスト・システム上にあるCPU /コアの数分まで)。抽出物を並列ストリームの数に分割します(例えば、8コアマシンでは、exec 8は並列にジョブを抽出します)。 Table_1の8分の1を指定するには、-Fおよび-Lパラメーターを使用します。 o / sと8 x BATファイルがある場合は、 "&"を使用します。 6. また、8 xのINSERT-SELECTジョブを並行して実行することもできます。行番号ではなく、PK値で分割します。