ハイパフォーマンスMySQL

実践ハイパフォーマンスMySQLを読んでの備忘メモ。

Innodb
  • 主キーはデータと一緒に、主キー順でレコードが保存される(=クラスタインデックス)
  • セカンダリインデックスには主キーが保存されるので、2段階の検索になる

従って、以下に注意する必要がある

  • 主キーのみでの1件検索 あるいは 範囲検索はセカンダリインデックスに比べて圧倒的に速い。
  • 主キーに長い値を入れるべきではない(セカンダリインデックスの容量が増える)
  • 絞り込めない(値に極端に偏りがある)インデックスなら意味はない。主キーで総なめしたほうが速い。
  • 目安として全体の30%を超えると総なめする

その他

  • MySQLオプティマイザは(当たり前だが)調べるべき行数が最小になるようなインデックスを選択する
  • つまりpossible_keysが複数ある場合にどのkeyが使われるかはケースバイケースである
レプリケーション

フローのメモ。

  1. マスタがバイナリログにクエリを記録
  2. スレーブのIOスレッドがマスタからクエリを読み出し、リレーログに追加
  3. スレーブのSQLスレッドがリレーログからクエリを読み出し、実行