1. Mysql のコンポーネント
Mysql は、SQL インターフェイス、パーサー、オプティマイザー、キャッシュ、およびストレージ エンジンで構成されます。
#2. Mysql の動作原理図
##3. Mysql の各コンポーネントの説明図
3-1: コネクタ
php、java などの他のプログラミング言語の SQL ステートメントと対話します。
3-2:管理サービスとユーティリティ
システム管理および制御ツール
3-3、接続プール
バッファ ユーザーの管理接続、スレッド処理およびキャッシュを必要とするその他の要件
3-4. SQL インターフェイス (SQL インターフェイス)
ユーザーの SQL コマンドを受け入れ、ユーザーがクエリする必要がある結果を返します。たとえば、select from は SQL インターフェイス
3-5、パーサー (パーサー)
SQL コマンドがパーサーに渡されると、パーサーによって検証および解析されます。
パーサーの主な機能:
a. SQL ステートメントをデータ構造に分解し、この構造を後続のステップに渡します。その後の SQL ステートメントの送信と処理は、この構造に基づいています
b. 分解中にエラーが発生した場合は、SQL ステートメントに無理があり、ステートメントの実行が続行されないことを意味します。
##SQL ステートメントはクエリ オプティマイザーを使用してクエリを実行する前にクエリを最適化します (複数の実行プランを生成し、最終的にデータベースは最も最適化されたプランを選択して実行し、できるだけ早く結果を返します)。 -projection" -Join" クエリ戦略。 例で理解できます: select uid,name from user where 性別 = 1;この選択クエリは、最初にすべてのテーブルをクエリするのではなく、where ステートメントに基づいて最初に選択します。性別フィルタリングを実行します。この選択クエリでは、すべての属性を削除してからフィルタリングするのではなく、最初に uid と名前に基づいて属性投影を実行します。これら 2 つのクエリ条件を接続して、最終的なクエリ結果を生成します。 3-7. キャッシュとバッファ (クエリ キャッシュ)クエリ キャッシュにクエリ結果がヒットした場合、クエリ ステートメントはクエリ キャッシュからデータを直接フェッチできます。 このキャッシュ メカニズムは、一連の小さなキャッシュで構成されています。たとえば、テーブル キャッシュ、レコード キャッシュ、キー キャッシュ、権限キャッシュなどです。3-8. エンジン (ストレージ エンジン)ストレージ エンジンは、次の処理を行う MySql の特定のサブシステムです。ファイル、そして MySQL の最もユニークな場所の 1 つでもあります。 Mysql のストレージ エンジンはプラグインです。 MySql AB が提供するファイル アクセス層の抽象インターフェイスに基づいてファイル アクセス メカニズムをカスタマイズします (このアクセス メカニズムをストレージ エンジンと呼びます)。4. SQL ステートメントの実行プロセス
通常、データベースは直接使用されませんが、他のプログラミング言語は SQL ステートメントを通じて mysql を呼び出し、mysql と SQL ステートメントによって処理されます。実行のために返された結果。では、Mysql は SQL ステートメントを受け取った後、どのように処理するのでしょうか?まず、プログラムのリクエストは mysql のコネクタを介してやり取りされ、リクエストが受信された後、接続プール (接続プール) に一時的に保存され、プロセッサ (##) によって処理されます。 #管理サービスとユーティリティ) を管理します。リクエストが待機キューから処理キューに入ると、マネージャーはリクエストを SQL インターフェース (
SQL インターフェース) にスローします。 SQL インターフェースはリクエストを受信した後、リクエストをハッシュし、キャッシュ内の結果と比較します。完全に一致する場合は、処理結果がキャッシュを通じて直接返されます。そうでない場合は、完全なプロセスが必要になります。
(1) SQL インターフェースは後続のインタプリタ (パーサー) に渡され、インタプリタは SQL 文が正しいかどうかを判断し、正しい場合はデータ構造に変換します。 (2) インタプリタの処理が完了すると、背後にあるオプティマイザ (Optimizer) が複数の実行プランを生成し、最終的にデータベースが最も最適化された実行プランを選択して結果を返します。できるだけ早く。
(3) 最適な実行計画を決定した後、SQL ステートメントをストレージ エンジン (Engine) に渡して処理することができます。ストレージ エンジンは、バックエンド ストレージ デバイスから対応するデータを取得して返します。それを元のパス、プログラムにコピーします。
ストレージ エンジンはデータを処理し、プログラムに返します。同時に、次の同じリクエストをより迅速に処理できるように、データのコピーもキャッシュに保持します。具体的な状況としては、mysql がクエリ ステートメント、実行結果などをハッシュし、キャッシュに保持して次のクエリを待機します。
(2) バッファとキャッシュの違い
mysql の概略図からわかるように、キャッシュには実際には 2 つのバッファとキャッシュがあります。
簡単に言うと、バッファは書き込みキャッシュ、キャッシュは読み取りキャッシュです。 (3) 必要なデータがキャッシュにキャッシュされているかどうかの判断方法 ここで誤解があるかもしれませんが、SQL文を処理する際、クエリ結果がキャッシュに保存されているかどうかを判断するために、クエリ内容がキャッシュにキャッシュされているか否かに関係なく、再度実行して実行結果を取得し、必要な結果と比較してヒットするかどうかを確認するという処理が行われます。プロセス全体を実行する必要がありますが、キャッシュの利点は何ですか?実際には、そうではありません。最初のクエリの後、mysql はクエリ ステートメントとクエリ結果をハッシュし、キャッシュに保持します。SQL クエリが到着した後、同じ方法でハッシュされます。 2 つのハッシュ値が比較され、同じであればヒットとなり、クエリ結果がキャッシュから返されます。そうでない場合は、プロセス全体を繰り返す必要があります。
この記事がデータベースを学習している学生に少しでも役立つことを願っています。記事内に何か間違っている点があれば、ご指摘ください。ありがとうございました。
Mysql 関連のその他の質問については、PHP 中国語 Web サイトを参照してください: mysql ビデオ チュートリアル
以上がmysqlの動作原理の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。