実践ハイパフォーマンスMySQLを読んでの備忘メモ。
- 主キーはデータと一緒に、主キー順でレコードが保存される(=クラスタインデックス)
- セカンダリインデックスには主キーが保存されるので、2段階の検索になる
従って、以下に注意する必要がある
- 主キーのみでの1件検索 あるいは 範囲検索はセカンダリインデックスに比べて圧倒的に速い。
- 主キーに長い値を入れるべきではない(セカンダリインデックスの容量が増える)
- 絞り込めない(値に極端に偏りがある)インデックスなら意味はない。主キーで総なめしたほうが速い。
- 目安として全体の30%を超えると総なめする
その他
- MySQLのオプティマイザは(当たり前だが)調べるべき行数が最小になるようなインデックスを選択する
- つまりpossible_keysが複数ある場合にどのkeyが使われるかはケースバイケースである
フローのメモ。
- マスタがバイナリログにクエリを記録
- スレーブのIOスレッドがマスタからクエリを読み出し、リレーログに追加
- スレーブのSQLスレッドがリレーログからクエリを読み出し、実行