MySQL クエリ ステートメントの実行プロセスの詳細な分析

WBOY
リリース: 2022-05-05 19:04:40
転載
1818 人が閲覧しました

この記事では、mysql に関する関連知識を提供します。主にクエリ ステートメントの実行プロセスを紹介します。MYSQL を例として、MySQL データベースのクエリ プロセスを明らかにし、誰もがある程度理解できるようにします。データベースの一部を抜粋しましたので、皆様のお役に立てれば幸いです。

MySQL クエリ ステートメントの実行プロセスの詳細な分析

推奨学習: mysql ビデオ チュートリアル

要件を満たす特定のデータをデータベースから取得する必要がある場合は、簡単に次のように書くことができます。 A B C FROM T WHERE ID = XX このような SQL を選択し、そのようなリクエストをデータベースに送信すると、データベースは正確に何をするのでしょうか?

今日は、MySQL データベースのクエリ プロセスを明らかにし、データベースの一部を誰もが理解できるようにするために、例として MYSQL を取り上げます。

1. MYSQL アーキテクチャ

MySQL は主にサーバー層とストレージ エンジン層に分けることができます。

サーバー層には、コネクタ、クエリ キャッシュ、アナライザー、オプティマイザー、エグゼキューターなどが含まれます。ストアド プロシージャやトリガーなど、すべてのクロスストレージ エンジン機能はこの層に実装されます。機能などのほかに、一般的なログ モジュール binlog ログ モジュールもあります。

ストレージ エンジン層は、データの保存と抽出を担当します。そのアーキテクチャ モデルはプラグインであり、InnoDB、MyISAM、Memory などの複数のストレージ エンジンをサポートします。現在最も一般的に使用されているストレージ エンジンは InnoDB (トランザクションをサポート) であり、MySQL バージョン 5.5.5 以降はデフォルトのストレージ エンジンとなっています。

2. コネクタ

コネクタは主に、データベースへのユーザーのログインと、アカウントのパスワード、権限、その他の操作の確認などのユーザー ID 認証を担当します。

ユーザーのパスワードが間違っている場合、「ユーザーのアクセスが拒否されました」エラーが表示され、クライアント プログラムは実行を終了します。

ユーザー アカウントのパスワードが渡された場合、コネクタは権限テーブル内のユーザーのすべての権限を照会します。この接続における後続の権限ロジックの判断は、この時点で読み取られた権限データに依存します。つまり、接続が切断されない限り、管理者がユーザーの権限を変更しても、ユーザーは影響を受けません。

3. クエリ キャッシュ (クエリ キャッシュ)

クライアントがサーバーとの接続を確立した後、MySQL はクエリ ステートメントの実行時に最初にキャッシュにクエリを実行し、この SQL が以前に実行されたかどうかを確認します。 。 合格。以前に実行されたステートメントとその結果は、キーと値のペアの形式でメモリに直接キャッシュされます。キーはクエリ ステートメントであり、値はクエリ結果です。クエリがこのキャッシュ内で直接キーを見つけることができた場合、値はクライアントに直接返されます。ヒットがない場合は、後続の操作を実行する必要があり、結果は完了後にキャッシュされ、次の呼び出しを容易にします。

これを見ると目が輝き、この機能を使いこなしたくなるはずです。

実際には、ここでクエリ キャッシュを使用することはお勧めできません。クエリ キャッシュは非常に頻繁に失敗します。テーブルが更新されている限り、このテーブル上のすべてのクエリ キャッシュはクリアされます。そのため、せっかく結果を保存したのに、使用する前にアップデートによって消去されてしまう可能性があります。更新圧力が高いデータベースの場合、クエリ キャッシュのヒット率は非常に低くなります。システム構成表のような長期間更新されない種類のテーブルなら別ですが、このようなシステム構成は構成プラットフォームに載せるべきではないでしょうか。

クエリ キャッシュ機能は MYSQL8.0 で削除されましたが、関係者もこの機能は実際のアプリケーション シナリオが比較的少ないと考えているため、単純に削除しました。

4. アナライザー

Mysql がクエリ キャッシュにヒットしない場合、アナライザーは主に SQL ステートメントの目的を分析するために使用されます。

  • 字句解析 : SQL ステートメントは複数の文字列で構成されており、最初に select などのキーワードを抽出する必要があります。 、テーブルのクエリ、フィールド名の提案、クエリ条件の提案などを提案します。

  • 文法分析: 字句分析の結果に基づいて、文法分析は主に、入力した SQL ステートメントが正しく、MYSQL 構文に準拠しているかどうかを判断します。ステートメントが正しくない場合、「SQL 構文にエラーがあります」というエラー通知が表示されます。

字句解析プログラムは、クエリ ステートメント全体をさまざまなタイプのトークンに分解し、構文分析は、定義されたシステム言語に基づいて、「さまざまなタイプのトークン」を MySQL にとって意味のある組み合わせに変換します。 。最後に、システムはオプティマイザーが依存するデータ構造である構文ツリー (AST) を生成します。

5. オプティマイザー

アナライザーを通過すると、MySQL はユーザーが何をしたいのかを認識します。実行を開始する前に、オプティマイザによって処理する必要があります。

なぜオプティマイザーが必要なのでしょうか?

  • オプティマイザには、多くの 複雑な最適化テクニック が含まれており、多くの場合、最高のプログラマのテクニックよりも複雑です。システムの自動最適化は、これらの最適化技術を誰もが利用できるようにすることに相当します。

  • オプティマイザは、テーブル内の行数、テーブル内の各列の分布など、データ ディクショナリから多くの 統計情報を取得できます。オプティマイザー オプティマイザーは何百もの異なる実行プランを検討できますが、プログラマーは一般に限られた数の可能性しか考慮できません。

  • はこの情報に基づいて効果的な実行プランを選択できます。ユーザー プログラムがこの情報を取得することは困難です。

  • つまり、オプティマイザは解析ツリーの形状を変更し、解析ツリーをクエリ ツリーに変更し、実行を決定します。プラン 。

6. Executor

MySQL は、アナライザーを通じて実行したいことと、オプティマイザーを通じてそれを行う方法を認識しているため、Executor ステージに入り、ステートメントの実行を開始します。

実行を開始する際には、まずユーザーにクエリの実行権限があるかどうかを確認し、権限がない場合は権限なしのエラーを返します。権限がある場合は、エンジンのインターフェイスを呼び出し、インターフェイスの実行結果を返します。

7. ステートメント分析

次の実際の SQL クエリ ステートメントを使用して、MYSQL クエリの実行プロセスを分析します

select id,name,sex,phoone from user t where t.age='26' and t.account='javadaily'
ログイン後にコピー

    まず第一に、クライアントはデータベースに接続する必要があります。アカウントのパスワードが間違っている場合は、エラー メッセージが直接返されます。正しければ、次のステップに進みます。
  • MYSQL8.0 より前では、まずクエリ キャッシュに移動し、この SQL ステートメントをキーとして使用して、メモリ内に結果があるかどうかをクエリしていました。まず権限と許可があるかどうかを判断し、クライアントに戻ります。そうでない場合はエラーが報告されます。クエリ キャッシュにヒットしなかった場合は、次のステップに進みます。
  • 実行します。アナライザーによる字句解析を行い、SQL ステートメントの主要な要素を抽出します。たとえば、上記のステートメントは Query select を抽出し、クエリ対象のテーブル名
  • user

    を抽出します。クエリ対象の列は です。 id,name,sex,phone、クエリ条件は age=26 および account=javadailly です。次に、キーワードが正しいかどうかなど、SQL ステートメントに文法上のエラーがあるかどうかを判断します。問題がない場合は、次のステップに進みます。

  • 上記の SQL には 2 つの実行プランがあり、オプティマイザは独自の最適化アルゴリズムに従って最も実行効率の高いプラン A を選択します (不正確な統計情報により、オプティマイザが間違った実行プランを選択する可能性があります) ) を決定したら、最適化計画の実行を開始します。
  • a. まず

    account=javadaily
    のユーザーをクエリし、次に age が 26 に等しいかどうかを判断します。 b. まず age=26## のユーザーを検索します。 #、クエリ ユーザー account=javadaily は権限の検証を実行します。クエリ権限がある場合は、データベース エンジン インターフェイスが呼び出されて実行結果が返されます。そうでない場合は、エラーが報告されます。

    推奨学習:
  • mysql ビデオ チュートリアル

以上がMySQL クエリ ステートメントの実行プロセスの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!