MySQLの最近のブログ記事



ウノウラボの id: komagata さんの記事が


何となく気になったので書いてみる。


別に間違っててもクビになるわけじゃないし。



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


ウノウラボ Unoh Labs: MySQL5からのインデックス結合で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 を使えってことだと思った。