複合インデックスと複数インデックス
ウノウラボの 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 を使えってことだと思った。