一般的に、MySQLサーバは、2つの部分層及びストレージエンジンの層に分けることができます。
ID = 10 T SELECT * FROM。
このクエリの実行:
外部層:
ユーザーは、サーバー層のメディアとの対話します
A. [データベースに接続するためのクライアント、コマンド/文を入力してください]
データベースへの接続のインタフェース
输入ID = 10 T SELECT * FROM。
サーバー層:
、コネクタなど、クエリキャッシュ、解析、最適化、アクチュエータなど、MySQLの中核サービス機能のほとんどをカバーするだけでなく、内蔵の(など、日付、時間、数学と暗号化機能など、)機能のすべてのサーバー層、全てのクロスストレージエンジン関数は、ストアドプロシージャ、トリガ、および他のビューとして、この層に実装されています。
II。コネクター[コネクタは、クライアント、アクセス許可、維持し、接続を管理との接続を確立する責任があります。]
コマンド接続の認証アイデンティティ--mysql -h $ IP -P $ポート-u入力 $ユーザ-p
認証を:コネクターは、ユーザーのアクセス権テーブルを照会します
P:すべての法域の後、この時間に依存する決意ロジックは、読み取り権限をします
接続に成功した後、ユーザーがあなたが変更されたユーザーの許可の管理者アカウントを使用している場合でも、確立されている。この手段は、それが既存の接続の権利には影響しません。編集した後、その後、唯一の新しい接続は、新しい権限設定を使用します。
認証に失敗しました:アクセスが拒否されたユーザーのために
ショーPROCESSLISTビューのステータス:接続したら、次のコマンドを使用することができます
コマンド列は、それが今で接続がアイドル状態であることを意味し、この行で「スリープ」を読み出します
クライアントが長すぎる運動でない場合は、接続が自動的に切断されます。この時間は、パラメータWAIT_TIMEOUTで制御され、デフォルトは8時間です。
接続は、2つのタイプに分け:短期および長期の接続[接続]
定義:
クライアントが要求し続けている場合、接続が成功したロング接続手段は、同じ接続を使用しています。
ショート接続が切断数回を終了し、クエリの各実行を意味し、次のクエリを再作成します。
長所と短所:
接続プロセスを確立することは減らすために長い接続、接続操作を利用するために複雑になっています
長い接続メモリのすべての使用過度の成長(PS:メモリマネージャのMySQL接続オブジェクトの一時的な使用の実装では、これらのリソースのみを解放接続が失われたとき、累積長い接続メモリフットプリントが大きすぎると、システムが殺されますオフ現象)が異常な再起動です
欠点の最適化:
定期的な長い接続が切断されています。時間の期間の後、または照会のために大量のメモリを決定し実行するプログラム、切断、再度クエリに再接続します。
あなたは、MySQL 5.7以降を使用している場合は、再初期化し、接続リソースにmysql_reset_connectionを実行することにより、各操作の後に比較的大きなを行うことができます。このプロセスは、再配線が必要ですし、検証機関を再実行しますが、接続は状態だけで完成作成に復元されますされません。
III。クエリキャッシュ
接続が確立された後、実施段階
MySQLは、クエリ要求を得た場合には、結果を返すために直接戻ってヒットした場合、あなたは、最初のクエリキャッシュのキー値が表示されます。
PS:メモリにキーと値のペアの形式でキャッシュし、結果の前に実行されたステートメント、{キー(クエリ):値(照会結果)}
短所:
クエリキャッシュの有効期限 - 長いテーブルの更新などとして、このテーブル上のすべてのキャッシュされたクエリが失敗します。。システム構成テーブル:そのクエリキャッシュの使用のみ半分は、次のような、テーブルの前に非常に長い時間で更新されません。
クエリキャッシュ機能を使用しない場合は、DEMANDパラメータquery_cache_type提供、およびステートメントを使用する必要があるため、「SQL_CACHE」は個別に指定された使用することができますID = 10 T *からSQL_CACHEを選択します。
IV。アナライザ
今は、それが文を解析する必要があるので、クエリは、クエリキャッシュのキー値を見つけることができませんです。
①、字句解析
文字列と複数の空間、MySQLの必要性によって入力された声明では、それぞれの文字列、内側にあるものを何の代表を識別するために
たとえば:MySQLのクエリは、あなたの入力「を選択し、」キーワードから同定しました。
②、構文解析
あなたのSQL構文でエラーが発生しているエラー、懸念はすぐに「近い使用」であります
V.オプティマイザ
オプティマイザの役割は、プログラムの実施を決定することです
解析の後、MySQLはすでに、あなたが何をしたいのかを知って、今例えば、プログラムのどの実装を決定するために、オプティマイザが必要になります。
(ID)を用いて、T2参加t1から選択*ここt1.c = 10とt2.d = 20。
効率が非常に異なるだろうと同じ結果が、しかし、この文をt1とt2 2つのテーブルを結合し、それは、さまざまな方法を実行する必要があります
VI。アクチュエータ
アナライザによるMySQLの何をすべきか知っている、私たちは声明の実施段階に、アクチュエータに今オプティマイザによってそれを行う、とする方法を知っています
①、権限を判断します
そこに特権が継続する場合は(コネクタのアクセス許可を読み取るための基礎を決定するために、この時点で)クエリへの権限を持っているかどうかを判断するには、テーブルを開くことができます。
②、判定エンジン
テーブルを開き、アクチュエータは、エンジンへのインターフェースを使用し、エンジンの表に従って定義されます。
③、文が実行されます
ID = 10 T SELECT * FROM;このクエリの実行は、 - [テーブルT、IDフィールドは、索引付けされていません]
エンジン・インターフェース・コール採取のInnoDBテーブルの最初の行は、この行が結果セットに存在する場合、次いで、ない場合はスキップし、ID 10の値ではないと判断します。
インタフェースの呼び出しエンジンは、ロジックは、テーブルの最後の行に到達するまで同じ決意を繰り返し、「次の行」を取ります。
すべての行以上のアクチュエータトラバーサルがクライアントに返された結果セットとして構成される条件セットレコードを満たします。
ストレージ層:
ストレージとデータ・ストレージ・エンジン層の検索は責任があります。そのアーキテクチャモデルは、プラグインのInnoDB、MyISAMテーブル、メモリ、およびその他のストレージエンジンのサポート、です。今、最も一般的に使用されるストレージエンジンInnoDBは、最初からそれをMySQLの5.5.5バージョンでは、デフォルトのストレージエンジンになりました。
テーブルの構造は、ステートメントエンジン=メモリ指定されたエンジンに追加することができたときに使用されるデフォルトのテーブルのエンジンエンジンを指定しないで作成
追加:
kは= 1 Tからの誤差Tがフィールドkのではなく、あなたが選択し、この文を実行*した場合、確かに表を「この列に存在しない」と報告されます:「『where句』内の不明な列 『K』」。あなたは、このエラーは、我々は、上記の段階何でそこから報告されていると思いますか?
[概要]個人
文法と語彙解析は、この段階で、決定するために分析される文の正しさを判断します