web-dev-qa-db-ja.com

非常に大きなSQLテーブルを複数の小さなテーブルに分割する

1〜2000の数値範囲についてテーブル内の列を検索し、各行全体を別のテーブルにコピーすることはできますか?そうすることにより、技術的にテーブルを小さな部分に分割します。

1
Sarge

質問の背後にある質問に対処する:

多分これに答えることができます。 1〜2000の数値範囲についてテーブル内の列を検索し、各行全体を別のテーブルにコピーすることはできますか?

テーブルを「パーティション化」できる列がすでにある場合は、次のようにすることができます。

SELECT * 
 INTO dbo.newtable_0001_to_2000 
 FROM dbo.existingtable 
 WHERE column >= 1 AND column <= 2000;

SELECT * 
 INTO dbo.newtable_2001_to_4000 
 FROM dbo.existingtable 
 WHERE column >= 2001 AND column <= 4000;

...

これにより、予測可能な行数が得られますが、行のsizeは制御されないため、各「パーティション」のデータによっては、これらのテーブルのサイズが等しくない場合があります。

5
Aaron Bertrand

Row_number()関数を使用して、一意の行番号を持つ列を追加できます。

  SELECT    LINKRECID ,
            FLAGS ,
            USERID ,
            FOLDER ,
            FOLDER2 ,
            ACCOUNTNO ,
            CREATEON ,
            MAILSIZE ,
            MAILDATE ,
            MAILTIME ,
            MAILREF ,
            LOPRECID ,
            RFC822_Old ,
            RECID ,
            MAILID ,
            EXT ,
            RFC822 ,
            ROW_NUMBER() OVER ( ORDER BY LINKRECID, FLAGS, USERID, FOLDER, FOLDER2, ACCOUNTNO, CREATEON, MAILSIZE, MAILDATE, MAILTIME, MAILREF, LOPRECID, RFC822_Old, RECID, MAILID, EXT, RFC822 ) AS RowNum

しかし、あなたがおそらく大規模に非効率を生み出しているというアーロン・バートランドに強く同意します。 SQLは、Excelよりもデータの検索/フィルタリングに優れています。少なくとも、検索の任意の部分を使用してSQLのデータをフィルター処理してからExcelにプルダウンすることを検討する必要があります。これにより、データ量が削減されます。

1
Dave.Gugg