2010-12-07 7 views
1

SQL Server 2008(再帰的な)CTEを使用して400万行のテーブルの1回に100万行を選択したいとします。結果はテキストファイルに書き出されますが、これはCTEチャンクパートではありません。チャンクで選択するCTE?

表には、DateTime列には良好なカバリングインデックスがありますが、PKはありません。

誰にも提案はありますか?

ありがとうございました。

+2

ここには情報が不十分です。正確な表構造、索引、および望ましい結果を与えます。再帰的または非再帰的なCTEを使用するか使用しないかによって、任意のテーブルからチャンクを選択する方法は約100万種類に過ぎません。 –

答えて

2

ROW_NUMBER() OVER(PARTITION BY 1 ORDER BY <column>) as PK_Keyウィンドウ機能を使用してpsuedo PKを作成できますが、選択ごとにテーブル全体が注文されるため、これは最適ではありません。

これを実行するより良い方法は、正確に1mの行ではなく、自分が持っているインデックスで文をチャンクすることです。つまり、あなたのデータのいくつかを調べ、あなたが望むものを達成するための任意の制限を選択します。 1か月におよそ1mの行がある場合は、各データ検索操作のために、1ヶ月分のデータを取得します。再帰的なデータ構造を扱っていないので、CTEは必要ありません。

+0

私は既存のインデックスによるチャンク化のアイデアが気に入っています。すべてのテーブルで同じ3列のクラスタード・インデックスがあります。しかし、私がテスト・テーブルを通過すると、各テーブルには何百万もの行があります。だから私は何よりも "火と忘れ"にもっと興味があるので、100万のような任意の数でチャンクすることはまともなベストベットです(データは後でBCPdになります)。 – Snowy

+0

まあ、で注文されたTOP1m行を取得し、インデックスの最小値と最大値の範囲を使用して "チャンク係数"を決定するステップをいつでも追加できます – hova

関連する問題