序文要件を満たす特定のデータをデータベースから取得する必要があります。Select ABC FROM T WHERE ID = XX などの SQL を書くのは簡単です。では、このようなリクエストをデータベースに送信すると、データベースはどのような処理を実行するのでしょうか。 今日は、MYSQL を例に、MySQL データベースのクエリ プロセスを明らかにし、データベースの一部を皆さんに知ってもらいます。 MYSQL アーキテクチャMySQL アーキテクチャ MySQL は主にサーバー層とストレージエンジン層に分けられます。 サーバー レイヤーには、コネクタ、クエリ キャッシュ、アナライザー、オプティマイザー、エグゼキュータなどが含まれます。ストアド プロシージャ、トリガー、ビュー、関数など、すべてのクロス ストレージ エンジン機能は、このレイヤーに実装されています。また、一般的なログ モジュールである binlog ログ モジュールもあります。 ストレージ エンジン層は、データの保存と取得を担当します。アーキテクチャ モードはプラグイン ベースであり、InnoDB、MyISAM、Memory などの複数のストレージ エンジンをサポートします。現在最も一般的に使用されているストレージ エンジンは InnoDB (トランザクションをサポート) であり、MySQL バージョン 5.5.5 以降ではデフォルトのストレージ エンジンとなっています。 コネクタコネクタは主に、アカウント パスワード、権限、その他の操作の検証を含む、データベースへのユーザー ログインとユーザー ID 認証を担当します。 ユーザー パスワードが正しくない場合は、「ユーザーのアクセスが拒否されました」というエラーが表示され、クライアント プログラムの実行が終了します。 ユーザー アカウントのパスワードが承認されている場合、コネクタは権限テーブル内のユーザーのすべての権限を照会します。この接続における以降のすべての権限ロジックの判断は、この時点で読み取られた権限データに依存します。つまり、接続が切断されない限り、管理者がユーザーの権限を変更しても、ユーザーには影響はありません。 クエリキャッシュクライアントがサーバーとの接続を確立した後、MySQL はクエリ ステートメントを実行するときに最初にキャッシュをクエリして、この SQL が以前に実行されたかどうかを確認します。以前に実行されたステートメントとその結果が、キーと値のペアの形式でメモリに直接キャッシュされます。キーはクエリステートメントであり、値はクエリ結果です。クエリがこのキャッシュ内で直接キーを見つけることができれば、その値はクライアントに直接返されます。ヒットがない場合は、後続の操作を実行する必要があり、完了後に次の呼び出しを容易にするために結果がキャッシュされます。 これを見た後、あなたの目は輝きますか?この素晴らしい機能を有効活用したいという衝動に駆られますか? 実際、ここでクエリ キャッシュを使用することは推奨されません。クエリ キャッシュは非常に頻繁に期限切れになります。テーブルが更新される限り、このテーブルのすべてのクエリ キャッシュがクリアされます。したがって、結果を保存するのに多大な労力を費やしたにもかかわらず、使用できるようになる前に更新によって結果が消去される可能性が非常に高くなります。更新の負荷が大きいデータベースの場合、クエリ キャッシュのヒット率は非常に低くなります。システム構成表のように長期間更新されない表であれば別ですが、こういったシステム構成は構成プラットフォーム上に置いた方がよいのではないでしょうか。 MYSQL8.0ではクエリキャッシュ機能が削除されました。公式もこの機能の実際の適用シナリオは少ないと判断し、単純に削除したとのことです。 アナライザMysql がクエリ キャッシュにヒットしない場合は、アナライザーに入ります。アナライザーは主に、SQL ステートメントの目的を分析するために使用されます。アナライザーは主に次の 2 つのステップに分かれています。
字句解析器はクエリステートメント全体をさまざまなトークンに分解し、構文解析器は定義されたシステム言語に基づいて「さまざまなトークン」を MySQL にとって意味のある組み合わせに変換します。最後に、システムは、オプティマイザーが依存するデータ構造である構文ツリー (AST) を生成します。 オプティマイザアナライザーの後、MySQL はあなたが何をしようとしているのかを認識します。実行を開始する前に、まずオプティマイザーによって処理される必要があります。 なぜオプティマイザーが必要なのでしょうか?
つまり、オプティマイザは構文解析ツリーの形状を変更し、構文解析ツリーをクエリツリーに変換して、実行プランを決定します。 アクチュエータMySQL はアナライザを通じて何を実行するかを認識し、オプティマイザを通じてそれを実行する方法を認識しているため、エグゼキュータ ステージに入り、ステートメントの実行を開始します。 実行を開始する際には、まずユーザーにクエリを実行する権限があるかどうかを確認する必要があります。権限がない場合は、ユーザーに権限がないことを示すエラー メッセージが返されます。許可があれば、エンジンのインターフェースが呼び出され、インターフェース実行の結果が返されます。 ステートメント分析 次の実際の SQL クエリ ステートメントを使用して、MYSQL クエリの実行プロセスを分析してみましょう。 t.age='26' かつ t.account='javadaily' のユーザー t から ID、名前、性別、電話番号を選択します。
a. まず、account=javadaily のユーザーを照会し、次に age が 26 かどうかを確認します。 b. まず、age=26 のユーザーを見つけ、次に account=javadaily のユーザーを照会します。
要約するこれで、MySQL クエリ ステートメントの実行プロセスを理解するためのこの記事は終了です。MySQL クエリ実行プロセスに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: vue3を使用して人間と猫のコミュニケーションアプレットを実装する
目次1. 監視プロパティを監視する1. ショッピングカート2. すべて選択し、すべて選択解除する2....
Alibaba Cloud yum コマンドでのデフォルトの MySQL バージョンは 5.17**...
docker create コマンドは、イメージに基づいてコンテナを作成できます。このコマンドの効果...
HTML 初心者は、ファイルを正しく参照する方法という問題によく遭遇します。たとえば、HTML ペー...
MongoDB を起動すると、プロンプトは次のようになります。共有ライブラリのロード中にエラーが発...
MySql ダウンロード1. 公式サイトを開き、ダウンロード パスを見つけます。ダウンロード アドレ...
1. はじめに不明な値または部分的に既知の値をフィルタリングする場合は、like 演算子を使用でき...
目次序文vue-i18nをインストールするロケールの設定getLangs.js の実装i18nインス...
この記事は、@C7210 によって翻訳されたブログ「Usability Counts」からの翻訳です...
ここでは、samba (ファイル共有サービス) v4.9.1 + OPENldap (バックエンド ...
セレクタのグループ化h2 要素と段落の両方を灰色にしたいとします。これを行う最も簡単な方法は、次のス...
この記事では、MySQL での重複キー更新時の replace into と insert into...
このコレクションには、あなたのデザインアイデアにインスピレーションを与える、輝いて光沢のある、優れた...
Windows 64ビットでのMySQLのインストールについて説明します。5.7以降、MySQLの...
nginx を導入した際に、フォワードプロキシの設定も nginx を使っていました。しかし、htt...