Access2010でテキストファイル(CSV)のインポートが遅い

Anonymous
2013-04-23T09:13:13+00:00

Accessの「外部データ取り込み」機能を使って、テキストデータ(CSV)をインポートする処理がかなり遅くて困っています。

インポート対象のテキストファイルサイズは約60.000KB レコード数は66,000件ほどです。

同スペックの別端末(W7 32bit)のAccess2003でインポートした場合は15秒もかからず完了していたのですが、2010でインポートすると5分ほどかかります。

インポート処理を速くする改善方法があれば教えてください。

環境 W7(32bit)、Access2010

操作手順

・メニューから、「外部データ取り込み」画面を表示

・ファイル名にファイル(.txt)パスを指定

・「レコードのコピーを次のテーブルに追加する」を選択し、コンボボックスで既存テーブルを選択

事象

・右下に「インポートしています」コメントとプログレスバーが表示され、時間はかかるが、

 プログレスバーが徐々に増えていき、完了します。

・エラーメッセージなどは表示されず、完了します。

・インポート完了後、Accessのファイルサイズは約870,000KBです。

懸念事項

・インポート定義を利用しています

・端末はメーカー3種試しましたがどれも同じぐらい遅いです。

・2010形式(.accdb)で保存し直したファイルで試したところ、インポート完了までの時間は15秒程度は早まりました。

・インポート対象ファイルのデータ量ごとにインポート処理時間を計測しましたが、データ量と処理時間は比例する結果となりました。

よろしくお願いします。

Microsoft 365 と Office | Access | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません
{count} 件の投票
質問作成者が受け入れた回答
  1. Anonymous
    2013-04-30T13:32:40+00:00

    MukkuMukuです。

    Access 2013 にだけ限っての話なのかどうかすこし確認してみました。

    640,000行、10列

    Access 2007 SP3 (ACE12):10秒以内でいずれも完了

    Access 2010 SP1 (ACE14) / Access 2013 RTM (ACE15) : 大きく差が出ます。

    トランザクションを仕掛けても差は埋まりません。

    ファイルに依存する依存する現象ではないのでは?という印象。

    というか、インポートだけに発生する現象ではないですね。インサート時に起きてるっぽい感じで。

    0 件のコメント コメントはありません
質問作成者が受け入れた回答
  1. Anonymous
    2013-04-30T10:06:00+00:00

    amamiZV さん、こんにちは。

    詳しい内容を書き込んでいただき、ありがとうございます。

    こちらでも以下の条件で試してみました。

    < テキスト ファイル (CSV) >

    640,000行、10列、タイトル行なし

    < テーブル >

    T1 → フィールド数10、すべてテキスト、空文字列の許可 : 全部 [はい]

    T2 → フィールド数10、すべてテキスト、空文字列の許可 : 全部 [いいえ]

    処理にかかる時間を計測しやすいように、今回は VBA を使って処理を行いました。

    (DoCmd.TransferTest acImportDelim ・・・ を使って、手作業に近い方法でやりました)

    すると、結果は次の通りでした。

    ・ T1へのインポート → 9秒

    ・ T2へのインポート → 74秒 (※ T1 の約 8 倍の時間がかかりました)

    「空文字列の許可」 の設定が、インポート処理の際のスピードに影響していると考えられそうですが、調べた範囲では、この現象が発生する理由、回避策についての情報は見当たりませんでした。

    せっかく質問を書き込んでもらっているのに、お力になれず、すみません。。。

    他に当現象についての情報や、回避策のアドバイスをお持ちの方がいましたら、ぜひ書き込みをお願いします。

    0 件のコメント コメントはありません

7 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2013-04-24T06:01:53+00:00

    amamiZV さん、こんにちは。

    マイクロソフト コミュニティ への投稿ありがとうございます。

    Access 2010 でテキスト ファイル (CSV) をテーブルに取り込む際の処理スピードについての質問ですね。

    手元の PC (Windows 7 SP1 + Office 2010) で試してみたところ以下のような感じでした。

    < 手順 >

    ・ Excel で CSV データを作成 (フィールド数 3、レコード数 1,048,576、ファイルサイズ 23.4MB)

    ・ Access (accdb 形式) で [外部データ] タブ > [インポートとリンク] グループ > [テキスト ファイル] の [外部データの取り込み – テキスト ファイル] の機能でテーブルに CSV ファイルを取り込み

    < 結果 >

    同じテーブルに 3 回連続で取り込んでみたところ、すべて 10 秒以内でインポート処理が完了

    amamiZV さんの場合は、取り込んでいるテキスト ファイルのサイズが 約 64.5MB (60,000KB) と、こちらで試したよりも大きなファイル サイズなので、単純に比較することはできないとは思うのですが、かなり処理スピードが違うな、という印象を受けました。

    Access のファイルに不要なデータが残っていて、それがデータ取り込みの処理に影響している可能性があるかもしれないので、一度、データベースの最適化を行ってみてはどうでしょうか。

    データベースの最適化は、[ファイル] タブ > [情報] > [データベースの最適化/修復] で実行することができます。

    引き続き情報を集めたい、という場合には、より詳しい状況がわかるとよいと思いますので、以下についても書き込んでください。

    ・ 取り込んでいる、テキスト ファイル (CSV) の項目 (フィールド) 数

    ・ 取り込み先テーブルの既存のレコード数

    ・ Access、テキスト ファイルの保存場所 (例 : PC 内のフォルダー、ネットワーク上共有フォルダー など)

    返信、お待ちしています。

    0 件のコメント コメントはありません
  2. Anonymous
    2013-04-25T07:44:32+00:00

    楠部 啓さん ご回答頂きまして、ありがとうございます。

    早速試しに、[データベースの最適化/修復] をしてから、インポートをしてみましたが、

    以前の計測時間とほとんど変わりませんでした。

    より詳しい状況

    ・あらかじめ用意してあるテーブルは、フィールド数が174

     (4つだけ数値型で、残りはすべてテキスト型です。)

     (うち、12項目はフィールドサイズを50~60桁にしていますが、その他の項目のフィールドサイズは20桁以下です。)

    ・インポートするテキストファイル(カンマ区切りCSV)の項目数も174

    ・用意してあるテーブルのレコード数は0件の状態で保存したものを使っています

    ・mdbファイル、CSVファイル、どちらもCドライブ直下のフォルダ1回層内です

     (フォルダ共有、ネットワーク経由などは設定していません)

    試したこと

    ファイル自体が壊れているかもしれないと思い、Access2010で新規作成したaccdbファイルで、

    174フィールドのテーブルを作成し、今までと同じテキストファイルを使ってインポートしてみましたが4分半でした。決して速くはない結果でした。

    他に、試してみることがあれば、教えて頂きたいです。

    よろしくお願いします。

    0 件のコメント コメントはありません
  3. Anonymous
    2013-04-26T05:20:10+00:00

    楠部 啓さん ひとつ分かったことがあります。

    楠部 啓さんが、初めに試してくださった条件で、10秒以内でインポートできたとのことでしたので、

    こちらの環境でも試してみると、20秒程度でとても速くインポートが完了しました。

    <分かったこと>

    フィールドのプロパティ「空文字列の許可」が「いいえ」になっているとインポート処理がとても遅い

    <確認した手順>

    Access2010で新規データベース、新規テーブル1つ、フィールド3つ(テキスト型)を作成し、

    約23MBのテキストファイル(CSV)を、メニューの「外部データ取り込み」でインポートしたところ20秒で完了。

    また別の新規データベースを、上記と同じように作成し、フィールドのプロパティで「空文字列の許可」を3フィールドすべて「いいえ」に設定。

    上記と同じテキストファイル(CSV)をインポートすると1分半で完了。

    インポート処理速度が遅くて困っているmdbのテーブルではすべての項目が

    空文字列の許可「いいえ」になっていました。

    <疑問点>

    空文字列の許可が「いいえ」でも、Access2003ではインポート処理速度はとても速かったのに・・

    <知りたいこと>

    空文字列の許可を「いいえ」にしておきたい場合に、インポート処理速度を向上させる

    改善策があればいいのですが・・。

    P.S.

    1つ前の返信文章中で、“新規作成したaccessで試してみた”という内容を書きましたが、

    テーブルデザイン画面で、既存のmdbのテーブルデザインをコピーして使ってしまったため、

    その時は、フィールドのプロパティの違いが原因だと気づくことができませんでした。

    改善策ではなくても、試してみることなどあれば

    教えてください。よろしくお願いします。

    0 件のコメント コメントはありません