MySQLのクロスチェックもぼちぼち場数踏んできたのでIndexまわりのまとめ。
・ストレージエンジンは必ず確認する。
→indexの構成も変わるし、できればどっちでも試験したほうが○。
・InnoDBはプライマリキーの値がセカンダリに載ってる。
→MyISAMでプライマリ含んだ複合とか張ってるところはInnoだと省略できる。
・InnoDBいいけどcountはMyISAMのほうが速い。
・テーブルのデータ件数を想定する。
→多くなるとこはなるべくindex張りたい(テーブル分割も考慮せよ)。
・InnoDBだったら可能な限りプライマリキーを使う。
→indexに実データが載ってる。
・張りまくってもメモリ食うし、index作るの時間かかるのでよくない。
・typeにALLかrangeがきたら要チェック。
・ExtraにUsing filesort, Using temporaryがきたら要チェック。
・複合張るときはSQLに出てくるカラムの順番を合わせる。
・テーブル結合でORDER BYとか使うときWHEREとORDERは同じテーブルでやらせる。
・インデックスマージ使うとこもあるからindex作る順番も大事(同じテーブル内)。
・一旦プライマリのみで取得→必要な項目をその中から取得
→大量なデータ取ろうとしたときのOOMの発生を抑制しやすい○
→MyISAMだとロックの軽減、I/O負荷の緩和が○
→プライマリを含んだ複合セカンダリが発生しやすい×
→SQLの発行回数が多くなるからCPUに負荷×
・JOINして一回で取得
→SQLの発行回数が減ってCPUに優しめ○
→データが多すぎたらOOMになるかも×
⇒JOINするかしないかは使うストレージエンジンとデータ件数と負荷試験のバランスを見ながら
決めたほうがいいんじゃないかと思ってる。結局。
MySQLパフォーマンスチューニングのためのインデックスの基礎知識
ソーシャルゲーム開発者なら知っておきたい MySQL INDEX + EXPLAIN入門
MySQLによるタフなサイトの作り方/佐藤 真人

¥3,360
Amazon.co.jp
↑の書籍はマジでオススメ。これをマスターしたら次は日本男児さんの本がいいらしい。
残念だがまだまだこの書籍でいける!
indexチューニングは大事だけど、結局小手先の技術になっちゃうからテーブル構成や
アプリの動きにまで気を配れるようにしなくちゃならん。
まず
・ストレージエンジンは必ず確認する。
→indexの構成も変わるし、できればどっちでも試験したほうが○。
・InnoDBはプライマリキーの値がセカンダリに載ってる。
→MyISAMでプライマリ含んだ複合とか張ってるところはInnoだと省略できる。
・InnoDBいいけどcountはMyISAMのほうが速い。
・テーブルのデータ件数を想定する。
→多くなるとこはなるべくindex張りたい(テーブル分割も考慮せよ)。
・InnoDBだったら可能な限りプライマリキーを使う。
→indexに実データが載ってる。
・張りまくってもメモリ食うし、index作るの時間かかるのでよくない。
EXPLAINで確認するとき
・typeにALLかrangeがきたら要チェック。
・ExtraにUsing filesort, Using temporaryがきたら要チェック。
index張るとき
・複合張るときはSQLに出てくるカラムの順番を合わせる。
・テーブル結合でORDER BYとか使うときWHEREとORDERは同じテーブルでやらせる。
・インデックスマージ使うとこもあるからindex作る順番も大事(同じテーブル内)。
~余談~JOINするか、アプリでアクションを分けるか
・一旦プライマリのみで取得→必要な項目をその中から取得
→大量なデータ取ろうとしたときのOOMの発生を抑制しやすい○
→MyISAMだとロックの軽減、I/O負荷の緩和が○
→プライマリを含んだ複合セカンダリが発生しやすい×
→SQLの発行回数が多くなるからCPUに負荷×
・JOINして一回で取得
→SQLの発行回数が減ってCPUに優しめ○
→データが多すぎたらOOMになるかも×
⇒JOINするかしないかは使うストレージエンジンとデータ件数と負荷試験のバランスを見ながら
決めたほうがいいんじゃないかと思ってる。結局。
お世話になったWeb
MySQLパフォーマンスチューニングのためのインデックスの基礎知識
ソーシャルゲーム開発者なら知っておきたい MySQL INDEX + EXPLAIN入門
お世話になった書籍
MySQLによるタフなサイトの作り方/佐藤 真人

¥3,360
Amazon.co.jp
最後に
↑の書籍はマジでオススメ。これをマスターしたら次は日本男児さんの本がいいらしい。
残念だがまだまだこの書籍でいける!
indexチューニングは大事だけど、結局小手先の技術になっちゃうからテーブル構成や
アプリの動きにまで気を配れるようにしなくちゃならん。