民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS SQLiteの面白さ(18) 大量データのインポートに際して

<<   作成日時 : 2008/06/28 23:19   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

テーブルに大量のデータをインポートする際にはまずインデックスを削除するのが当たり前、なのだが、今となっては誰にそれを教わったのかよく思い出せない。書籍などを見ても、あまりこのあたりのテクニックは書かれていない様子だ。

Accessしか使わない人にはよく分からないかも知れないが、RDBのテーブルにインデックスがついたままだと、データをインポートする際に何度も何度もインデックスが更新されるのでものすごく時間がかかる。なので、何万件ものデータをインポートする際には、まずインデックスを削除してからデータをインポートし、それから再度インデックスを作成したほうがはるかに効率がよいのだ。
で、今日、実際に、インデックスがついたままだとどれくらい時間がかかるのか調べてみた。

取り込むデータはおよそ60万件。
極端な例として、まずテーブルを作成し、空の状態でインデックスを作成し、データのインポートを試みる。不吉な予感がしたのでまず5万件だけ。厳密なテストではないので、手元の時計でおおざっぱに時間計測...のはずが、5分待っても10分待ってもインポートが終わらない。結局、最初の5万件だけで30分もかかってしまった。怖くてとても60万件全部のインポートなどできない。
次に、インデックスのない状態のテーブルを作成し、データをインポート。60万件一気に取り込んでも5分とかからなかった。続いてインデックスを作成。これはさすがに時間がかかる。が、それでも30分ほどで済んでしまった。

とまあ、想像以上に差がついてしまったわけだ。本番運用で、インデックスがついたままでのインポートなど考えたくも無い。
もちろんこの件数になるとインデックスなしでは実運用に耐える検索速度は得られないので、インデックスを使わないという選択肢はありえない。
インデックス付のテーブルのメンテナンスは少し手間がかかる。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
SQLiteの面白さ(18) 大量データのインポートに際して 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる