どのようにMySQLでSQLクエリで

1.1 MySQLの基本的なアーキテクチャの概要

  • コネクタ:認証と権限に関連する(MySQLのログイン)。
  • クエリキャッシュ:クエリを実行する場合(この機能は実用的ではないので、MySQLのバージョン8.0を除去した後に)、それは最初にキャッシュをチェックします。
  • アナライザ:なしキャッシュヒットが存在しない場合は、SQL文が実行されるのアナライザ後、アナライザはぶっきらぼうに、SQL文を見ていること、そして、あなたのSQL文の構文が正しいかチェックします。
  • オプティマイザ:MySQLのによると、それを行うための最善の解決策だと思います。
  • アクチュエータ:ストレージエンジンからのデータを返し、その後、文を実行します。

 

 

簡単に言えばMySQLサーバは、層とストレージエンジン層に分かれています。

  • サーバ層:例えば、ストアドプロシージャ、トリガ、ビュー、関数、等のすべてのストレージエンジンの機能をこの層に実現される両端のコネクタ、クエリキャッシュ、アナライザ、オプティマイザ、アクチュエータ等を含む、一般的には、ありますログモジュールbinglogログモジュール。
  • ストレージエンジン:データ保存と検索のための主な原因とは、InnoDBは、MyISAMテーブル、メモリ、およびその他のストレージエンジン、モジュールredoログモジュール独自のログを持っているInnoDBエンジンをサポートプラグインアーキテクチャの使用を置き換えることができます。今、最も一般的に使用されるストレージエンジンInnoDBは、それが最初からのMySQL 5.5.5バージョンのデフォルトのストレージエンジンとして扱われます。

1.2サーバー層は、実質的に紹介します

1)コネクタ

高いガードのと同じレベルのようなメインコネクタと認証、および権利関連機能、。

これは、動作チェックアカウントのパスワード、権限など、ユーザーアカウントのパスワードが経過した場合、コネクターは、内の接続後にすべての権限権限テーブル、クエリ、ユーザーの権限に行くなどのデータベース・ユーザの​​ログイン、ユーザ認証のための責任がありますこの時点で論理的な決定は、常にそれが長期フォローアップ接続がすぐに、管理者がユーザーの権限を変更し、ユーザーにも影響を受けているではないようとして、である、データを読み取るためのアクセス許可に依存します。

2)クエリキャッシュ(削除のMySQL 8.0バージョン)した後、

メインクエリキャッシュは、私たちが実行され、結果はステートメントを設定し、SELECTステートメントをキャッシュするために使用しました。

接続が確立された後、時間は、クエリを実行するために最初のクエリキャッシュ、MySQLは最初にこのSQLを実行するかどうかをチェックしますので、メモリ内のキーと値の形でキャッシュ、キーが期待されているクエリは、値は、結果セットがあります。キャッシュキーがヒットした場合の結果の完了がキャッシュされます後、それは、フォローアップ操作を実行する、ヒットしない場合は、直接クライアントに便利な次の呼び出しが返されます。もちろん、あなたが実際にクエリキャッシュを実行すると、クエリのテーブルがある場合は、まだ、ユーザーの許可をチェックします。

実際のビジネスシナリオでのクエリキャッシュの無効化を使用すると、テーブルを更新する場合は、このすべてのキャッシュが空になるテーブルのクエリになり、非常に頻繁にすることができので、MySQLのクエリキャッシュは、推奨されません。頻繁に更新されていないデータの場合、キャッシュの使用は可能です。

だから、一般的には、ほとんどの場合、我々は、クエリキャッシュを使用することを推奨されていません。

MySQLの8.0バージョンは、キャッシュ機能を取り除いた後、正式にはこれだけ直接削除、実用的なアプリケーションシナリオではあまり機能と考えられています。

3)アナライザ

MySQLはそれがアナライザに入り、キャッシュにヒットしませんでした、アナライザは主にここでやっているSQL文を分析するために使用され、アナライザはステップに分割されます。

最初のステップ、字句解析は、SQL文は、最初に、このような選択、昇給クエリ、フィールド名が前方提案置くクエリなどなどのキーワードを、抽出する必要があり、複数の文字列を持っています。そして、その操作の後、彼らは第二段階に入ります。

入力した第二段階、構文解析、主にSQL裁判官は、MySQLの構文かどうか、正しいです。

これらの2つのステップを完了した後、MySQLは、しかし、実行する方法を、どのように最良の結果を実行するために開始する準備ができているのですか?今回は、オプティマイザを再生する必要があります。

4)オプティマイザ

オプティマイザの役割、それが実行するプログラムの最適な実装と考えていることである(そして時には最善ではないかもしれないが、この記事では説明のこの部分の深い知識を必要とする)、このようなインデックスの時間を選択する方法として、複数のインデックス、マルチテーブルどの順番などに関連するクエリの時間を選択します。

オプティマイザはこの文が落ち着くする方法を具体的に実行されたことを言うことができた後は、言うことができます。

5)アクチュエータ

あなたがプログラムの実施を選択すると、MySQLは開始する準備ができて、そして最初の実行は、ユーザが何の権利を持っていないことを確認します前に許可を持っていない場合、それは、エラーメッセージを返します、あなたが権限を持っている場合、エンジンインタフェース、インタフェースのリターンを呼び出すことになります実行結果。

2.1クエリ

そんなに言って、そのSQL文は、それを実装する方法は何ですか?実際には、私たちのSQLには二つのタイプに分けることができ、一つは1は(追加、更新、削除)、更新クエリされています。次のように私たちは、最初次のクエリ文を分析し、文は次のとおりです。

選択* tb_studentのAからAに年齢= '18 ' A.の名前= '张三「;

上記の説明に関連して、我々はこの文の実行の流れを分析します:

  • 文が権限を持っているかどうかをチェックし、あなたが権限を持っている場合がある場合に、存在する場合には、直接メモリ内のこのキーのSQL文のクエリ結果になります最初のクエリキャッシュ、MySQL8.0以前のバージョンでは、エラーメッセージを返していない権限場合直接キャッシュ、そうでない場合は、次のステップ。

  • 字句解析は、すべての列を照会することを選択し、抽出テーブルが必要と呼ばれるtb_student、必要上記のクエリ文を抽出するなどのSQLステートメントのキー要素を、抽出、分析器によって行わ、このクエリは、テーブルID =「1」です。そして、チェックが次のステップに問題はありません場合は、SQL文は、このように正しいキーワードなどかのように、構文エラーがあるかどうかを判断します。

  • 次に、プログラム、上記のSQL文のオプティマイザ決定実装があり、プログラムの2つの実装があります。

      a.先查询学生表中姓名为“张三”的学生,然后判断是否年龄是 18。
      b.先找出学生中年龄 18 岁的学生,然后再查询姓名为“张三”的学生。
    

    オプティマイザは、(必ずしも最善時々、思うオプティマイザ)、独自の最適化アルゴリズムに従ってプログラムの最高の実行効率を選択します。だから、実行を確認した後に実装する準備ができて計画しています。

  • 権限のチェックが権限は、データベースエンジンインタフェースを呼び出された場合、許可なしに結果がエンジンを返し、エラーメッセージを返します。

2.2更新ステートメント

上記は、SQLクエリの実行プロセスであり、その後、次の我々は、更新ステートメントが、それをどのように実行されるかを見てみましょうか?次のようにSQL文は次のとおりです。

update tb_student A set A.age='19' where A.name=' 张三 ';

年齢でジョー・スミスへレッツ・変更は確かに、データベース内のフィールドの実際の年齢を設定していない、または遊びのテクニカルディレクターであることを。実際には、文はまた、基本的には問い合わせのプロセスに沿って行く、確かにそれは、このモジュールは、ログの導入となります更新ログを実行するための時間になり、MySQLはすべて、ログモジュラーバイナリログ(アーカイブログ)が付属していますストレージエンジンを使用することができ、我々が使用しInnoDBエンジンはまた、ログモジュールのREDOログ(REDOログ)、私たちはこのステートメントの実行フローダウンInnoDBのパターンを議論する必要が付属しています。次のようにプロセスは以下のとおりです。

  • キャッシュがある場合にジョー・スミスが最初のチェックには、このデータは、キャッシュにも使用されます。
  • その後、クエリステートメントを取得し、年齢が19に変更し、その後、エンジンのAPIインターフェイスを呼び出して、データのこのラインは、この時点では、メモリに保存されているInnoDBエンジンのデータも記録REDOログ、REDOログを書かされた状態に入るための準備、そして通知、提出する準備ができて、完全に実行します。
  • アクチュエータ、通知レコードのbinlogを受け、そして後に、エンジン・インターフェースを呼び出す状態の提出のためにREDOログを提出します。
  • アップデートは完了です。

IIIまとめたもので

  • MySQLサーバは、redoログ、層は、主コネクタサーバー、クエリキャッシュ、アナライザ、オプティマイザ、エグゼキュータ、ならびにログモジュール(バイナリログ)を含む、ログモジュールは、すべての実行エンジンを共有することができ、層およびエンジン層に分割されています唯一のInnoDBはあります。
  • エンジン層は、プラグイン今のMyISAM、InnoDBは、メモリなど、を含む、です。
  • 次のようにクエリの実行プロセスは、次のとおりです。パーミッションのチェック(キャッシュヒットの場合)---「クエリキャッシュ---」---アナライザ「オプティマイザ---」権限のチェック---「アクチュエータ---」エンジン
  • UPDATE文の実行プロセスは、次のされています。アナライザは----アクチュエータ--- --- binlogの「REDOログ(コミット状態「エンジン--- REDOログは、(状況を---準備」「----権限チェック」 )

おすすめ

転載: www.cnblogs.com/bulrush/p/12534278.html