MySQLのINDEX


2016年7月20日

最近データベース関連で詰まったことが多い僕です。

MySQLのInnoDBのINDEXのサイズは参考値です


テーブルのインデックスサイズをphpMyAdminで見るなら「テーブル>構造>インデックス」で一意な値の数が見れます。
information_schemaからQueryで取得する時はどうでしょうか。
なんとなくはCARDINALITYがソレっぽいです。
しかしなんだかphpMyAdminのとズレがあります。

なぜでしょう?

理由は統計情報が近似値しか出せない仕様にあります。
しかし、モノよってはぜんぜん違う値が出ます。

考えられるのが統計情報の更新タイミングのズレです。
タイミングの話は次回にするとして、なにしろ参考値であることは注意しましょう。


ちなみに


これを調べようと思ったキッカケは統計情報が壊れているのを発見した時でした。
で、再発防止の為に監査する仕組みができないかと思いまして。
その程度の用途であれば運用に耐えうるかもしれませんがハッキリしないのも嫌いなのでそっとしています。

ちなみ当件の過程で自分的phpMyAdminのビッグな仕様変更に気づきました。
いつの間にかテーブルエクスポート結果のIndex作成クエリが最後に付いていたのです。
以前はPRIMARY KEYだとCREATE文中にあったような…。
changelogを見ると、ver 4.2.0.0 にて変更されているようでした。
rfe #1004 Create indexes at the end in SQL export

インポート時のパフォーマンス向上対策でしょうかね。