非公式MySQL 8.0オプティマイザガイド

View the Project on GitHub

  1. はじめに
  2. サーバーアーキテクチャー
  3. B+ツリー インデックス
  4. Explain
  5. オプティマイザ トレース
  6. 論理変換
  7. コストベース最適化
  8. ヒント
  9. プランの比較
  10. 複合インデックス
  11. カバリングインデックス
  12. Visual Explain
  13. 変わりゆく実行計画(Transient Plans)
  14. サブクエリー
  15. 共通テーブル式(CTE)とビュー
  16. 結合
  17. 集約
  18. ソート
  19. パーティショニング
  20. クエリーリライト
  21. 不可視インデックス
  22. クエリープロファイリング
  23. JSONと生成列
  24. 文字セット

はじめに

原文URL: http://www.unofficialmysqlguide.com/introduction.html
翻訳者: taka-h (@takaidohigasi)

オプティマイザの概要

クエリーオプティマイザはクエリーを「入力」とみなし、この章に記述したプロセスを経て実行計画を「出力」として生成します。私はよく、クエリー最適化をGPSのナビゲーションと対比して例えます。

1. 目的地として住所を入力します

2. どのように進むと一番効率的に目的地にたどり着けるかを、教えてくれます

住所は目的地です。どのように行くかを指定しなくても、ナビゲーションシステムが考えうる経路について評価し、一番効率的に目的地に到着する経路をアドバイスしてくれることでしょう。

SQL言語は「宣言的」であるという点で、住所とにています。どのようにするかという過程ではなく、最終的な状態を指定します。データベースシステムには、多くのインデックス(そして多くのテーブルとの結合)があるため、ナビゲーションシステムと同じように、同じ結果をえられる多くの方法があります。

このアナロジーのしめくくりとして、GPSのナビゲーションが「常に絶対に一番速い道を案内してくれる」わけではないのと同じことが、クエリー最適化についてもいえます。全ての道に交通量のデータがあるとは限らないのと同様に、オプティマイザも不完全なモデルに対して処理をする必要があります。熟練した方にとっては、チューニングする必要が生じる状況が発生しえるわけです。