クエリ書き換えプラグイン MySQL 5.7.6 以降、MySQL Server は、サーバーが実行する前にサーバーが受信したステートメントを検査し、場合によっては変更できるクエリ書き換えプラグインをサポートしています。 以下は公式文書の紹介です。 事前解析書き換えプラグインには次の機能があります。 1. このプラグインを使用すると、サーバーに到着した SQL ステートメントを、サーバーによって処理される前に書き換えることができます。 2. プラグインはステートメント文字列を受け取り、異なる文字列を返す場合があります。 解析後クエリ書き換えプラグインには、次の特性があります。 1. プラグインは、解析ツリーに基づくステートメントの書き換えをサポートします。 2. サーバーは各ステートメントを解析し、その解析ツリーをプラグインに渡します。プラグインはツリーを走査できます。プラグインは、さらに処理するために元のツリーをサーバーに返すことも、別のツリーを構築してそれを返すこともできます。 一般的に、プラグインは 2 つの書き換え方法をサポートしています。1 つは構文解析前に SQL 文字列を直接変更する方法で、もう 1 つは構文解析後に構文解析ツリーを操作して書き換える方法です。この機能は非常に便利です。たとえば、SQL ステートメントが誤ってアップロードされたが、インデックスが見つからないためにデータベース全体を照会できない場合や、サードパーティのコンパイル済みソフトウェアを使用しているが、SQL ステートメントが誤って実行され、アプリケーションを直接変更できない場合などです。この機能は非常に役立ち、ユーザーの要件を満たすプラグインを作成することもできます。 インストールまたはアンインストール 最も簡単なインストールプロセスは次のとおりです。 shell> mysql -u root -p < install_rewriter.sql パスワードを入力してください: (ここでルートパスワードを入力してください) 新しいライブラリ query_rewrite がデータベースに追加されたことがわかります。データベースを確認します。 プラグインが現在インストールされているかどうかを確認します。 実際の操作 たとえば、次のステートメントは主キー クエリの使用を強制します。 DBA_no = ? の場合、DBA_inf から DBA_no、name を選択します。 次のように書き直します。 SELECT DBA_no, name from DBA_inf force index(primary) where DBA_no = ? Rewriter プラグインのルールを追加するには、次の 2 つの手順を実行します。 1. 対応するルールを rewrite_rules テーブルに追加します。 2. flush_rewrite_rules() ストアド プロシージャを呼び出して、テーブル内のルールをプラグインに読み込みます。 次の例では、単一のリテラル値を選択するステートメントに一致する単純なルールを作成し、次のアクションを実行します。 query_rewrite.rewrite_rules(pattern, replacement, pattern_database) に値を挿入します ("SELECT DBA_no, name from DBA_inf where DBA_no = ?","SELECT DBA_no, name from DBA_inf force index(primary) where DBA_no = ?","DBAs"); 挿入したばかりのルールを照会します。 出力ルールの各列の内容は次のとおりです。
リライタクエリ書き換えプラグインプロセス rewrite_rules テーブルにルールを追加するだけでは、Rewriter プラグインがそのルールを使用するのに十分ではありません。テーブルの内容をプラグインのメモリ キャッシュにロードするには、flush_rewrite_rules() も呼び出す必要があります。 Rewriter プラグイン操作では、ストアド プロシージャを使用して、ルール テーブルをメモリ キャッシュに読み込みます。通常の操作では、ユーザーは flush_rewrite_rules() を呼び出して、rewrite_rules テーブルの内容を Rewriter メモリ キャッシュに読み込むだけです。テーブルをロードした後、クエリ キャッシュもクリアされます。 ルール テーブルが変更された場合、プラグインが新しいテーブルの内容からキャッシュを更新できるように、このプロシージャを再度呼び出す必要があります。 書き換えプラグインで定義されたステートメント パターンを使用して、対応するレコードをクエリします。 DBA_no =8 の場合、DBA_inf から DBA_no、名前を選択します。 explain文を使用することで、現在のSQLはインデックスを使用しています プラグイン操作情報を書き換える Rewriter プラグインは、いくつかのステータス変数を通じてその動作に関する情報を提供します。 これらの変数に関する注記:
flush_rewrite_rules() ストアド プロシージャを呼び出してルール テーブルをロードするときに、一部のルールでエラーが発生すると、CALL ステートメントによってエラーが生成され、プラグインによって Rewriter_reload_error ステータス変数が ON に設定されます。 この場合、rewrite_rules テーブルで NULL 以外のメッセージ列値を含む行をチェックして、問題が何であるかを確認します。 リライタプラグインは文字セットを使用します rewrite_rules テーブルが Rewriter プラグインにロードされると、プラグインは character_set_client システム変数の現在のグローバル値を使用してステートメントを解釈します。その後、character_set_client がグローバル値を変更する場合は、ルール テーブルを再ロードする必要があります。 クライアントのセッション character_set_client 値は、ルール テーブルがロードされたときのグローバル値と同じである必要があります。そうでない場合、ルールの一致はそのクライアントに適用されません。 上記は、MySQL クエリ書き換えプラグインの使用に関する詳細な内容です。MySQL クエリ書き換えプラグインの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: CentOS7 で docker を使用して Apollo 構成センターをデプロイする実装
>>: LinuxでのDockerのインストールチュートリアル
1. はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメン...
目次序文1. クロスドメインの問題はなぜ発生するのでしょうか? 2. 解決策クロスオリジンリソース共...
ブラウザの互換性は、実際の開発では見落とされがちな最も重要な部分です。古いバージョンのブラウザの互換...
目次序文オプション1:オプション2:オプション3:オプション4(最終的に採用されたオプション):要約...
1. 基本的な Spring-boot クイックスタート1.1 クイックスタート pom.xml は...
目次1. 概要2. メモリ管理3. ガベージコレクション4. GCアルゴリズムの紹介5. 参照カウン...
1. Docker Swarm とは何ですか? Docker Swarm は、Docker が公式に...
このチュートリアルでは、インストールに最新の MySQL コミュニティ グリーン バージョンである ...
成し遂げるこの効果は CSS を使用して完全に再現することは困難です。 CSS でシミュレートされた...
JSX を使用してコンポーネント システムを構築する前に、例を使用してコンポーネントの実装原理とロ...
序文バックエンド開発では、一度に大量のデータがロードされ、メモリやディスク IO のオーバーヘッドが...
この記事では、MySQL 8.0.11のインストールチュートリアルを参考までに紹介します。具体的な内...
Centos7 スイッチブートカーネル注: 必要に応じて、最初にyum update -yを実行して...
目次1. JavaScript とは何ですか? 2. JavaScript は何に使用されますか? ...