非公式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/server-architecture.html
翻訳者: taka-h (@takaidohigasi)

大まかにいうと、MySQLサーバーは2つの部分から構成されています。「サーバー」1と「ストレージエンジン」です。クエリー最適化はサーバーレベル、そしてストレージエンジンAPI上で実行され、意味的には4つのステップに分けられます。

オプティマイザの役割

オプティマイザを定義されたレイヤーに分割するのは進化的プロセスでした。初期のMySQLでは、今のようにクエリー最適化はされてませんでしたし、性能上の理由からクエリー最適化のステップはうまく分離されていませんでしたし、また、定義もされていませんでした。

保守性を向上させた新機能を実現するには、MySQL 5.6, 5.7, そして8.0で実装されてきたリファクタリングが必要でした。ステップ化したことによって、新機能への道もまた開けました。例えば、実行計画のキャッシュに関しては、ステップを明確に区分しなければコネクション間の再利用が難しいため、実現が難しくなります。

  1. “サーバー”という単語はあいまいでサーバーとストレージエンジンをあわせた上位集合としても使われることにご注意ください。