📈
MySQL High Performance Tuning Guide in Udemy Section 4
MySQL High Performance Tuning Guide in Udemy Section 4
25. Section Overview
- innoDBのindexはテーブルのデータの組織化に使われている
- indexはprimary keyに基づいて作成される
- primary keyはランダムIOとシーケンシャルIOの比率や、セカンダリインデックスのサイズ、どのくらいのページをバッファプールに読み込むかといったことに影響を与える
26. The clustered Indexes
- indexはClusterings Indexと呼ばれる
- 名前の由来は、indexの値が実際にクラスタリングされているところから
- InnoDBはデフォルトではprimary keyでclustered indexを作る
- primary keyがない場合、Uniqueでnon nullableなindexを作り、それもない場合はhidden primary keyを作る
- clustered primary keyは性能を良くすることも悪くすることもある
- 特にテーブルのストレージエンジンを変更するときは、クラスタリングに注意したほうがよい
英語
- laid out
- lay outの過去分詞形
- records are laid out
- レコードが配置されている
27. Choosing a Good Primary Key
- secondary indexはprimary keyを保持している
SELECT username FROM userinfo WHERE email = 'john@doe.com'
-
というSQLを考えると、まずはemailに張られたsecondary indexを探しに行く
-
secondary indexのリーフにはprimary keyがある
-
それをつかってprimary key indexを探索する
-
MySQLに限らずデータベースはデータを固定されたサイズのページに保存している
-
なぜなら関係するデータを近い場所に保存しておけば、データフェッチするときにページをたくさん読み込まなくてすむから
-
mailboxを実装するとして、user_idでクラスタリングしておけば、1ユーザーのすべてのメッセージはすくないページの読み込みで済む
-
クラスタリングしてなければ、ばらばらに保存されているのでIOのコストが高く付く
-
clustred indexにはindexとそのデータを保持することも可能
-
もしテーブルがclustred indexの利点を活かすように作られてなければ不利な点が出てくる
-
ページがいっぱいのときに、新しい行を挿入したりprimary keyをアップデートしたりするとページが分割される
-
primary key順にデータが挿入される場合は早い
-
大量のデータを挿入したら
OPTIMIZE TABLE name;
でフラグメンテーションを解消できる -
データがメモリに乗り切る場合はデータの順番はあまり重要ではないから、clustered indexの利点はうけずらい
英語
- tremendously
- 副詞
- ものすごく、すさまじく
- that can boost performance tremendoysly.
- そいつはすさまじくパフォーマンスをブーストできる
- drawback
- 名詞
- 欠点、不利な点
- some drawback can apper.
- いくつかの欠点が現れるだろう
- accommodate
- 他動詞
- を収容できる
- the storage engine accommodate the new row.
- ストレージエンジンは新しい行を収容できる
参考
- クラスタ化インデックスとセカンダリインデックスについてはこれが詳しかった
28. Use Case:Inserting rows in primary key order with InnoDB
- UUIDをprimary keyに使う場合の不利な点
- pageがスパースになる
- insertしたらキャッシュに乗ってるページをキャッシュしなおさないといけないが、insertする対象のページもランダムなので、更新対象のキャッシュもランダムピックな振る舞いになる
- ページスプリットがしょっちゅう発生し、それは大量にデータの移動が必要になるのでコストがでかい
29. Optimal Primary Key in Practice
- primary keyはなるべくシーケンシャルなものを使うのが重要
Discussion