SQLiteの面白さ(16) あらためてインデックスの大切さを知る
これまでMS-Access、MySQLなどを使う機会は多々あったのだが、データベースのインデックスに関して、深く考えたことはあまりなかった。頻繁に検索をかけるカラムにインデックスを作っておくと速くて便利だというくらいの認識だった。
それが今回、300万件を超えるデータを扱ってみてわかったのだが、「適切にインデックスを作成しておかないと、仕事にならない」。インデックスがあればほぼ一瞬で結果が取り出せるのに対して、それがなければ3時間、しかもその間はPCがほぼ使い物にならない。
普段は数千件のDBしか扱っていなかったので「インデックス作っておくと速いね」くらいの認識で、何時間もレスポンスがなくなるような事態というものをまったく想定できていなかった(何度か十万件単位のDBを扱った際は、単にまぐれで有効なインデックスを作っており、支障が生じていなかった)。
細かく見ていくと、SQLiteがインデックスを使う条件には色々とあるようで、これをまた調べないと、SQLiteを効率的に使いこなすことはできない。SQLiteがシンプルだといっても、勉強しなければいけないことはたくさんあるようだ。
参考:
http://www.sqlite.org/optoverview.html
ある意味、DBに関してあやふやな知識でも使えてしまうMS-Accessがよくできているということでもあったのだろうけれど、結局、Accessで処理が困難な件数のDBに直面したところで、「ああ、あの時基礎をきっちりとやっておけば」ということになるのだ...そういう事態にならずに一生を過ごす人のほうがはるかに多いのかもしれないが。
それが今回、300万件を超えるデータを扱ってみてわかったのだが、「適切にインデックスを作成しておかないと、仕事にならない」。インデックスがあればほぼ一瞬で結果が取り出せるのに対して、それがなければ3時間、しかもその間はPCがほぼ使い物にならない。
普段は数千件のDBしか扱っていなかったので「インデックス作っておくと速いね」くらいの認識で、何時間もレスポンスがなくなるような事態というものをまったく想定できていなかった(何度か十万件単位のDBを扱った際は、単にまぐれで有効なインデックスを作っており、支障が生じていなかった)。
細かく見ていくと、SQLiteがインデックスを使う条件には色々とあるようで、これをまた調べないと、SQLiteを効率的に使いこなすことはできない。SQLiteがシンプルだといっても、勉強しなければいけないことはたくさんあるようだ。
参考:
http://www.sqlite.org/optoverview.html
ある意味、DBに関してあやふやな知識でも使えてしまうMS-Accessがよくできているということでもあったのだろうけれど、結局、Accessで処理が困難な件数のDBに直面したところで、「ああ、あの時基礎をきっちりとやっておけば」ということになるのだ...そういう事態にならずに一生を過ごす人のほうがはるかに多いのかもしれないが。
この記事へのコメント