読者です 読者をやめる 読者になる 読者になる

ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

MySQL(InnoDB)はフィールド値の一部で主キーを構成できる&そのメリット

MySQLのインデックスを作成する際、対象となるフィールド値の一部だけを使って構成できることを知らなかった。サイズが大きいフィールドにprimary keyをはる必要がある場合に助かる。

http://msykt.hatenablog.com/entry/2013/07/30/023704

このようにフィールド値の一部で主キーを構成する場合にどんなメリットがあるのか調べてみると、MySQLのリファレンスマニュアルに答えがありました。InnoDBのインデックスの構成上、主キーは短くしたほうが有利とのこと。

InnoDB では、非クラスタインデックス (二次インデックスとも呼ばれる) のレコードに行の主キーカラムが格納されますが、行は二次インデックスには含まれません。InnoDB は、クラスタインデックス内で行を検索するのにこの主キー値を利用します。主キーが長いと二次インデックスで使用される領域も多くなるので、主キーは短くしたほうが有利です。

http://dev.mysql.com/doc/refman/5.1-olh/ja/innodb-index-types.html

このインデックスの構成がイメージしにくい場合は以下のページのイラストがわかりやすいです。
InnoDBの主キーはクラスターインデックスだということを意識しよう | 株式会社インターオフィス

フィールド値の一部で主キーを構成するというケースは多分珍しいと思います。ただ、MySQL(InnoDB)において主キーを短くするメリットとその理由を知っておくことは大切ですね。