図からわかるように、MySQL アーキテクチャは主に サーバー層 と ストレージ エンジン層 に分かれています。
サーバー層は、コネクタ、キャッシュ、アナライザー、オプティマイザー、およびエグゼキューターに分割されます。関数、ストアド プロシージャ、トリガー、ビューなど、すべてのクロスストレージ エンジン機能がこのレイヤーに実装されます。
ストレージ エンジン はプラグ可能です。一般的なストレージ エンジンには、MyISAM、InnoDB、Memory などが含まれます。MySQL5.5 より前のデフォルトは MyISAM で、それ以降のデフォルトは InnoDB でした。
コネクタは主にクライアント接続とユーザー認証を管理するために使用されます。
TCP プロトコルはクライアントとサーバーの接続に使用され、TCP ハンドシェイクを実行することで接続が確立され、これに基づいてコネクタが認証を開始します。
> mysql -hlocalhost -P3306 -uroot -p
認証に失敗すると、エラー エラー 1045 (28000): ユーザー 'root'@'localhost' のアクセスが拒否されました (パスワードを使用: YES) が発生します。
show processlist コマンドを使用して、システム内のすべての接続の情報を表示できます。
Commond 列は接続を表します。ステータス、デーモンはバックグラウンド プロセスを表し、クエリはクエリを表し、スリープはアイドル接続を表します。
クライアントから要求されたクエリはストレージ エンジンに直接アクセスせず、最初に結果がキャッシュに存在するかどうかを確認します。結果がキャッシュされている場合は、結果を直接返します。キャッシュされていない場合は、クエリ処理を再実行し、クエリの完了後に結果をキャッシュします。
無効化キャッシュは、挿入、更新、削除、変更操作など、データ テーブルが変更されるとクリアされます。
データ テーブルが頻繁に変更される場合、キャッシュ ヒット率は非常に低くなります。キャッシュを使用すると読み取りおよび書き込みのパフォーマンスが低下するため、MySQL 8.0 以降のバージョンではキャッシュ モジュールが削除されました。
次のコマンドを実行すると、キャッシュが有効かどうかを確認できます:
アナライザーは主に、SQL ステートメントの 字句分析 と 文法分析 を実行します。
MySQL キーワードと各単語の意味については、字句解析が必要です。次に、構文分析を実行して、SQL ステートメントが MySQL 構文要件を満たしているかどうかを検出します。
MySQL は、文字列内のカラム名、テーブル名、where、select/update/insert およびその他の MySQL キーワードを識別し、SQL が文法規則に従って文法を満たしているかどうかを判断し、最終的に抽象構文を生成します。ツリー (AST) 。
例: SQL ステートメント内の where キーワードの記述を少なくすると、エラーが表示されます。
mysql> select * from user id=1; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=1' at line 1
SQL ステートメントが実際に実行される前に、オプティマイザーによって処理される必要があります。
私たちがよく知っている実行計画 (Explain) は、オプティマイザーによって生成されます。
オプティマイザには主に、論理最適化と物理最適化という 2 つの機能があります。
論理最適化では、主に等価述語の書き換え、条件付き単純化、サブクエリの削除、接続の削除、セマンティックの最適化、グループのマージ、選択プッシュダウン、インデックスの最適化クエリ、テーブルクエリ置換ビュークエリ、ユニオン置換や演算などを実行します。
貪欲なアルゴリズムとコスト推定モデルを通じて、物理最適化の主な目的は、各実行方法のコストを推定することです。また、インデックスを使用してテーブル接続を最適化し、最終的にクエリ実行プランを生成します。
MySQL オプティマイザーのアーキテクチャ図が添付されており、最適化プロセスが明確にわかります:
オプティマイザーは SQL を最適化し、実行プランを生成した後、その実行プランをエグゼキューターに渡します。
エグゼキュータは、ストレージ エンジン インターフェイスを呼び出して、実際に SQL クエリを実行します。 SQL ステートメントの実行は、ストレージ エンジンから返されたクエリ結果を取得し、クライアントに返した後に終了します。
以上がMySQL アーキテクチャ設計例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。