大まかにいうと、MySQLサーバーは2つの部分から構成されています。「サーバー」1と「ストレージエンジン」です。クエリー最適化はサーバーレベル、そしてストレージエンジンAPI上で実行され、意味的には4つのステップに分けられます。
オプティマイザを定義されたレイヤーに分割するのは進化的プロセスでした。初期のMySQLでは、今のようにクエリー最適化はされてませんでしたし、性能上の理由からクエリー最適化のステップはうまく分離されていませんでしたし、また、定義もされていませんでした。
保守性を向上させた新機能を実現するには、MySQL 5.6, 5.7, そして8.0で実装されてきたリファクタリングが必要でした。ステップ化したことによって、新機能への道もまた開けました。例えば、実行計画のキャッシュに関しては、ステップを明確に区分しなければコネクション間の再利用が難しいため、実現が難しくなります。
“サーバー”という単語はあいまいでサーバーとストレージエンジンをあわせた上位集合としても使われることにご注意ください。 ↩