複合インデックスと複数インデックス

ウノウラボの id: komagata さんの記事が
何となく気になったので書いてみる。
別に間違っててもクビになるわけじゃないし。

MySQLユーザー的には常識なのかもしれませんがMySQL 5.0からはインデックス結合という機能があるそうです。1テーブル1インデックス問題(勝手にそう呼んでいる)が解決するかもしれないと思って調べてみました。

はい、知りませんでした。複数インデックス。

CREATE TABLE `employees` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(32) default NULL,
`age` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `index_name` (`name`),
KEY `index_age` (`age`)
)

でも、上の構造で、name, age を元に抽出するつもりだとすると、
自分の感覚では複合インデックス付ける。

CREATE TABLE `employees` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(32) default NULL,
  `age` int(11) default NULL,
  PRIMARY KEY  (`id`),
  KEY `index_name_age` (`name`, `age`)
)

で、1テーブル1インデックスなので、
どのクエリも取りこぼさないような組み合わせの
複合インデックスを複数作ってた。


別にこれでもいんじゃないかと思うんだけど、
複数インデックス使ったらクエリに応じた
複合インデックス作りまくる手間が省けるって事かな。
何も考えずに、インデックスかけたいフィールドに
インデックスつけりゃいいのかな。


結論として、DBに関しては耳を塞いでる自分がいる。
じゃなくて、とにかく MySQL5 を使えってことだと思った。