正規化データ - ループを用いて一括挿入
-
22-08-2019 - |
質問
誰がテーブルを破壊し、新しいテーブルに多数のレコードを挿入するプロセスをスピードアップに役立つ可能性が任意のヒントを持っています。
私は現在、各文字が、自身のレコード(行)を持つ新しいテーブルに大きな文字列(700 +文字)のレコードを含むテーブルを変換するためのアクセスやVBAを使用しています。私は一度に文字列の1文字をループしてVBAでの簡単なDAOを使用して新しいテーブルに挿入することで、これをやってます。
現在、私は、データの小さなサブセットで働いている - 300は700の文字列で、それぞれが記録されます。このプロセスはとても50,000レコードの完全なデータセットにスケールアップするつもりはない実行するのに約3時間かかります!
表1構造
のid - 文字列 001 - ABCDEFG
となります。
表2構造
のid - 文字列 001 - 001 - B 001 - C 。 。 。 。 。ます。
私は物事を向上させることができ任意の提案に開いている。
乾杯
フィル
解決
ノースウィンドを使用してこの例を考えてみましょう。 INTEGER
(アクセス=倍長整数)を有する配列と呼ばれるテーブルを作成し、値1〜20(すなわち、20行テーブル)を移入。そして、従業員の姓の各文字を解析するために、このACE /ジェットシンタックスのSQLコードを使用します:
SELECT E1.EmployeeID, E1.LastName, S1.seq, MID(E1.LastName, S1.Seq, 1)
FROM Employees AS E1, Sequence AS S1
WHERE S1.seq BETWEEN 1 AND LEN(E1.LastName);
他のヒント
一括挿入を行う場合、あなたは多くの場合、テーブルのインデックスを削除する一括挿入をやって、その後、インデックスを復元することによって、大幅なパフォーマンスの向上を得ることができます。あるケースでは、MySQLのテーブルにカップル万レコードを挿入するとき、私は、これは約20分まで17時間から実行時間を持って見てきました。
私は(私は15年ほど前に、アクセス2以来、それを使用していない)が、一般的な技術は、任意のデータベースエンジンほとんどに適用されます。
アクセスに関する特別助言することはできません私たちは、データを転置ルーチンを持っています。わからないコードが最適化されたが、それはより速く、ファイルが圧縮された後に大幅に実行されている場合。
削除するとテーブルの再構築の多くを行うと、大幅に.mdbファイルをbloatsます。