クエリ書き換えプラグイン 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のインストールチュートリアル
年、月、週、日グループによる MySQL クエリ1. 学年別検索 SELECT DATE_FORMA...
目次序文1. エンドポイント2. 接続ハンドラ3. コヨーテ4. コンテナ責任チェーンパターン序文T...
以前にも同じような記事を書いたことがありますが、js スクリプトを使用しており、ファイルパスを表示で...
導入分散について話すときは、分散構成センター、分散ログ、分散リンク トラッキングなどについて考える必...
例:本日、前回のオフィスコラボレーションプラットフォーム実験の続きをしていたところ、仮想マシンは以前...
mysql マスタースレーブ構成1. 準備ホスト: 192.168.244.128スレーブ: 192...
導入MySQL データベースの読み取りと書き込みの分離を設定すると、データベースに対する書き込み操作...
目次1 システムの紹介2 システムショートカット3 一般的なシステムコマンド1 システムの紹介 1....
1. ROW_NUMBER()定義: ROW_NUMBER() 関数は、select によってクエリ...
目次使用EsLintの使用プロフィールを追加するPrettierの使用huskyとlint-stag...
KILL [接続 | クエリ] processlist_id MySQL では、各接続は個別のスレ...
VMware Toolsをインストールすると、仮想マシンホスト間で①テキストをコピーして貼り付けるこ...
おそらく誰もが js の実行によって DOM ツリーの解析とレンダリングがブロックされることを知って...
目次1 コンテナクラウドとは何ですか? 2 Dockerの紹介3 dockerを使ってMySQLをイ...
この記事では、ディスクを追加または拡張して、Vmare で有効にする方法について説明します。シナリオ...