📈

MySQL High Performance Tuning Guide in Udemy Section 5

2023/01/02に公開

MySQL High Performance Tuning Guide in Udemy Section 5

30. Introduction

省略

31. Whey add a Secondary index?

  • secondary indexはprimary keyじゃないindex
  • secondary indexを使えばフルテーブルスキャンするより速くデータにアクセスできる
  • secondary indexを張れば並び替えも速くなる
  • covering indexすれば実際のデータまでアクセスしないですむ
  • max/minが速くなる

32. When should you Add or Remove Indexes?

  • indexはメンテナンスしないといけない
  • 利便性とコストを比べるべき
> use sys;
> select * from schema_tables_with_full_table_scan;
  • ↑でフルテーブルスキャンなクエリを見つけられる
> select * from statements_with_full_table_scans\G
  • ↑でindexが使われなかった標準化されたクエリが見れる
> select * from schema_unused_indexes\G
  • ↑で全く使われていないindexが見れる
mysql> select * from schema_redundant_indexes\G
  • ↑で過剰なindexが見れる

33. Why Index Statistics are Important?

  • secondary indexは間接的にprimary keyを参照し実際のデータにアクセスするため、一般的にランダムIOになる
  • テーブルスキャンはシーケンシャルIO
  • だから、テーブルスキャンのほうがセカンダリインデックスを使うよりも早い場合がある
  • つまり、インデックスを使う場合は多くのデータを絞り込める必要がある
  • どのくらい絞り込める必要があるかはハードディスクの特性による
  • HDDの場合は全体の30%より絞り込めなければテーブルスキャンのほうが有利だと言われていた
  • optimizerは与えられたクエリに対してインデックスがどのくらい良いかで実行方法を判断している
  • MySQLにおいては、それらの統計情報はストレージエンジンが提供する責務がある

英語

  • the rule of thumb
    • 経験則
  • used to be ~
    • かつて〜でした

34. how to help MySQL make better decisions?

  • InnoDBはindexの統計情報を一部のリーフノードのページから計算する
  • 例えば、ランダムに20ページ取ってきて計算するということ
  • 統計情報の計算はクエリのパフォーマンスに影響するので、計算対象を絞らざるをえない
  • 統計情報は正確ではないからoptimizerは実行計画の選択を失敗することがある
  • 永続的な統計情報と一時的な統計情報があり、create tableのオプションでテーブルごとに指定できる

英語

  • adverse
    • 不利な、不都合な
  • transient
    • 一時的な
    • Persistent Statistics and Transient Statistics
      • 永続的統計情報と一時的統計情報

35. Covering Indexes

  • Indexにselectに必要な情報がすべて含まれていれば、実際のデータにアクセスせず、セカンダリインデックスだけでデータアクセスが完了する
  • Query Cacheにセカンダリインデックスが保存されるから速い
GitHubで編集を提案

Discussion