MySQLのインデックス

最近のインデックスについて調べてる。
読んでる本は、「理論から学ぶデータベース実践入門」と「Linux-DB システム構築/運用入門」。

  • where col1 = 1 order by col2 だと片方のインデックスしか使われない(1つのテーブルで複数のインデックスが使われない(えない)ため)
  • 検索キーとソートキーが違うとインデックスが使われないのは、データ構造が原因(かMySQLの仕様)
  • 不要なインデックスがあると挿入更新削除時のパフォーマンスが悪くなる
  • 1ビットカラムのインデックス貼るのは意味ないことが多い。しかしデータが偏っていて少ない方を検索する場合は効果あり(カーディナリティ)
  • ヒットする件数が多い時はテーブルフルスキャンのほうが早い(シーケンシャルアクセスとランダムアクセス)
  • カバリングインデックス便利(だけどアプリ変えたら爆遅になるとかありそう)
  • インデックスが張っているテーブルに特定(バッファプール次第)のレコード数が超えて挿入するとパフォーマンスが悪くなる
  • 挿入時にもディスクI/O起きてる(インデックス更新のため)
  • DBホストを立ち上げたばかりで挿入するとキャッシュが空なのでインデックス作成によって発生するディスクI/Oが発生してパフォーマンス悪い

レコード数が少ないとほぼ無縁。