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

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

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

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

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

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック