[MySQLの]論理的なフレームワークとSQLの実行

免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/wrs120/article/details/80711131
ロジックチャート

ここで説明する絵を書きます

  MySQLデータベースを4層に分割され、それは(UBD)を考えるように思考のプログラムを設計することができます設計、我々は4層にMySQLを置くことができます。

第1層:接続層

  前記接続プールコンポーネント、部品管理サービスやツールは、ローカルの靴下の通信TCP / IP通信と、ほとんどのクライアント/サーバー・ツールの実装を含むトップクライアントおよび接続サービスの一部です。主にいくつかの同様の接続処理、認可および認証、および関連するセキュリティソリューションを完了します。層の上にスレッドの接続プールの概念を導入し、スレッドはクライアントによってセキュアなアクセス認証を提供します。また、このレベルでのセキュアリンクSSLに基づいて達成することができます。サーバーはまた、各クライアントのセキュリティアクセスのための操作権限を持っていることを確認します。

第二層:レイヤサービス

  前記SQLインターフェースコンポーネントを、クエリアナライザコンポーネント、オプティマイザ成分、緩衝成分、第二のコア層は、主に、SQLインタフェースコンポーネントとしてほとんどのサービスを実行し、キャッシュクエリ、SQLの解析と最適化と、いくつかの組み込み関数を完了する実行。ストレージエンジン全体のすべての機能はまたようにプロシージャ、関数、として、このレベルを達成します。この層では、サーバはクエリを解析し、内部分析ブックを作成し、その完全な配列は、索引を使用するかどうかを判断するためにルックアップテーブルとして最適化を対応し、最終的に対応する操作が行われた生成します。select文の場合、サーバーは内部キャッシュを照会し、キャッシュが十分に大きい場合には、環境性能の多数に対処するための読み出し動作が良いリフトシステムとすることができるように、

第三層:レイヤエンジン

  実際のストレージエンジンは、APIを介してストレージエンジンと通信するためのMySQLサーバへのデータの格納と検索を担当しています。別々のストレージエンジンは、異なる機能を持っているので、我々は彼らの実際のニーズに応じて選択することができます。MySQLストレージエンジン、ストレージエンジンクエリ処理および他のシステムタスクでプラグと抽出されたデータの相分離を記憶している、このアーキテクチャは、実際のニーズ及び動作要件に応じて適切なストレージエンジンを選択することができます

第四層:貯蔵層

  データ記憶層は、相互作用は主に裸のデバイス上で実行されているファイルシステム上にあり、データストレージおよびストレージエンジンを完了します

実行を選択

ここで説明する絵を書きます

第一步:发送sql语句给服务端, 通过服务器的权限检查(连接层功能)

第二步:查询缓存

  服务器通过权限检查之后(用户名和密码等),查询缓存,如果缓存时打开的,服务器首先检查查询缓存中的数据

  • 命中时,MySQL会立即返回结果,省去解析、优化和执行等阶段。否则,进入下一阶段
  • MySQL保存结果于缓存中,把select语句本身做hash计算,计算的结果作为key,查询结果作为value
  • 查询语句的大小写会影响缓存的存储和命中,故需保持查询语句的大小写一致性

第三步:解析器

   mysql解析器使用mysql语法规则验证和解析查询,通过关键字(select,insert等)将SQL语句进行解析,生成对应的“解析树”,此时的树是没有优化的,即检查你编写的sql语句是否有错误

第四步:预处理器

  预处理器根据mysql规则进一步检查解析树是否合法,即对解析书进行预处理(有计算的地方得到计算结果,变量的赋值,函数的执行

第五步:查询优化器

  当语法树被认为是合法的了,优化器便将其转化成执行计划,即将sql语句进一步优化,第一步做什么,第二步做什么,比如你的执行顺序是A,B,C但是经过查询优化器分析认为B,A,C执行顺序是最优的

第六步:查询执行引擎

  通过调用存储引擎实现的接口来完成引擎的调用,进而完成结果的查询,这些接口被称为handler API

第七步:返回结果

  查询执行的最后一个阶段就是将结果返回给客户端。即使查询不到数据,MySQL仍然会返回这个查询的相关信息,比如该查询影响到的行数以及执行时间等等

  相关介绍参见美文:https://blog.csdn.net/fuzhongmin05/article/details/70904190,此篇文章介绍了更多的知识点,很值得一读

缓存注意事项

どのような声明1.キャッシュされません

  • クエリは、いくつかの不確定なデータを持っている場合には、(例えば、今のように、キャッシュされません)など、CURRENT_TIME()、
  • クエリは、ユーザ定義関数、ストアドファンクション、ユーザ変数、一時テーブル、MySQLデータベースシステムテーブルを含み、または任意のテーブルが含まれている場合、アクセス許可は、そのようなものを含むCURRENT_USERまたはCONNECION_ID()が異なるためのクエリとして、通常はキャッシュされませんユーザは、異なる結果が返されるので、結果には意味がキャッシュされません

2.キャッシュは、追加費用をもたらします

  • クエリを読むキャッシュヒットするかどうかを開始する前にチェックする必要があります
  • 1は、クエリがキャッシュされ、キャッシュされていないことができます読み取ると実行を終了したときに、そして、MySQLのクエリキャッシュ店は結果になります。
  • データが書き込まれたときに、MySQLはすべてのキャッシュテーブルに対応しなければならないため、設定されているキャッシュメモリシステムになります障害は、時間以上の多くを消費し、また影響を与えるために書きます
  • そのため、クエリキャッシュは必要ありません、それはすべてのクエリより大きなオーバーヘッドの効率性に依存し、キャッシュがヒットするかどうかを照会することができます

おすすめ

転載: blog.csdn.net/wrs120/article/details/80711131