だるろぐ

だるいぶろぐです

RDBMSにおけるテーブルとインデックスの構造とか

(追記:このエントリは自力ではありません)


http://d.hatena.ne.jp/hirafoo/20110624/1308931556
で、ROW OPERATIONS Speedで、「indexが不適切だったりすると、増える。」と書いたけど、それはどんな場合か。


例えば、
id user_name
の2つのカラムがあるテーブルがあったとして、idにしかindexを張っていなかったとする。
ここから「user_name が hirafoo なデータを探す」処理をするとする。
idにしかindexを張っていないので、フルスキャンして、条件にマッチするデータを探すことになる。
ので、テーブルに存在するデータ全部読むことになる。テーブルにデータが100件存在したら、100件読んでくる。


で、user_nameにもindexを張っていた場合、「user_nameが h で始まるデータを先に引っ張ってくる」とか、そんなことがなされる。
実際には「user_name が hi で始まるデータ」とかかもしらんけど。
何にせよ、フルスキャンは発生しないので、例えば「user_nameが h で始まるデータを先に引っ張ってくる」場合なら、「user_name が h で始まるデータ」の件数が読まれる。
当然さっきの場合より読んでくるデータの件数は少ないよね。


なので、ROW OPERATIONS Speed がやけに大きい値や、変な値になっていたら、DBのindexや、コードがおかしいんじゃないかなーという話になるわけです。


という。