MySQLカスタム変数の概念と特徴

MySQLカスタム変数の概念と特徴

MySQL カスタム値は、値を保存するための一時的なコンテナです。サーバーへの接続がアクティブである限り、コンテナ内の値を保存して使用できます。カスタム変数は、次のように単純な SET または SELECT ステートメントを使用して設定できます。

SET @one := 1;
@min_actor を設定します:= (SELECT MIN(actor_id) FROM sakila.actor);
SET @last_week := CURRENT_DATE-INTERNAL 1 WEEK;

変数を定義したら、それを SQL ステートメントで使用できます。

SELECT * FROM film WHERE created_date <= @last_week;

MySQL カスタム変数は非常に強力ですが、カスタム変数自体にも次のような欠陥があることも知っておく必要があります。

  • カスタム変数はクエリのキャッシュを無効にします。
  • テーブル名や列名などの代替セマンティクスを持つ識別子として使用したり、LIMIT 句内で使用したりすることはできません。
  • カスタム変数は単一の接続に基づいているため、複数の接続にわたって使用することはできません。
  • 接続プールまたは永続的な接続を使用する場合、カスタム変数によってコードが相互作用から分離されます。これが発生する場合、コードまたは接続プールのバグである可能性がありますが、その可能性はあります。
  • MySQL 5.0 より前のバージョンでは大文字と小文字が区別されますので注意してください (MySQL 5.0 以降では大文字と小文字は区別されなくなりました)。
  • 変数の型を明示的に指定することはできず、実際の変数の型は不確実な型推論に依存し、バージョンによって異なる場合があります。整数変数を設定する場合は 0 、浮動小数点変数を設定する場合は 0.0 、文字列の場合は '' を使用するなど、最初に定義するときに型を指定するのが最善の方法です。ただし、後で新しい値を指定すると、その新しい値に応じて型が変更されます。これは、MySQL カスタム変数の型が動的であるためです。
  • 場合によっては、オプティマイザーがカスタム変数を最適化し、クエリが期待どおりに実行されないことがあります。
  • 割り当ての順序やタイミングは、オプティマイザによって選択されたクエリ プランに応じて不確実になります。したがって、最終結果は混乱を招く可能性があります。
  • 代入演算子は他の演算子よりも優先順位が低いため、明示的な括弧を使用する必要があります。
  • 未定義の変数はエラーを報告しないため、簡単にエラーが発生する可能性があります。

カスタム変数は、SELECT ステートメントだけでなく、すべてのタイプのステートメントで使用できます。実際、これがカスタム変数の最大の利点の 1 つです。たとえば、サブクエリを使用して並べ替えの計算を実行したり、低コストの UPDATE ステートメントを実行したりするように、複雑なクエリを書き直すことができます。

場合によっては、オプティマイザが変数をコンパイル時の定数であると認識し、値を割り当てないことがあり、その結果、予期した動作がおかしくなることがあります。 LEAST のような関数にカスタム変数の割り当てを入れると、通常この問題は回避されます。もう 1 つの方法は、カスタム変数を使用する前に、その変数に値があるかどうかを確認することです。やりたいときもあれば、やりたくないときもあります。

少し実験してみると、カスタム変数を使って次のような興味深いことをたくさん行うことができます。

  • 合計と平均を計算します。
  • グループ化されたクエリの FIRST 関数と LAST 関数をシミュレートします。
  • 非常に大きな数値に対して数学演算を実行します。
  • テーブル全体を MD5 ハッシュに変換します。
  • 0 に近いが設定された境界を超えるサンプル値を除外します。
  • 読み取りおよび書き込みポインターの位置をシミュレートします。
  • 変数を WHERE 条件に埋め込み、SHOW ステートメントで表示します。

カスタム変数は、ソートされた値の出現回数をカウントしたり、同じデータの更新と挿入の数を計算したり、遅延された結合クエリなど、いくつかのアプリケーションで役立ちます。次の記事では、具体的な使い方を紹介します。

上記はMySQLカスタム変数の概念と特徴の詳細な内容です。MySQLカスタム変数の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL でカスタム変数を使用して遅延 UNION を記述する例
  • MySQLクエリ最適化プロセスを理解する
  • MySQLクエリ最適化: 100万件のデータに対するテーブル最適化ソリューション
  • MySQLの共同クエリ最適化メカニズムの詳細な説明
  • MySQL クエリの最適化: クエリが遅い原因と解決策
  • サブクエリ最適化における MySQL 選択の実装
  • MySQL の遅いクエリの最適化方法と最適化の原則
  • MySQL数千万の大規模データに対する30のSQLクエリ最適化テクニックの詳細な説明
  • MySQL ビッグデータ クエリ最適化エクスペリエンスの共有 (推奨)
  • MySQL 百万レベルのデータページングクエリ最適化ソリューション
  • カスタム変数を使用した MySQL クエリの最適化

<<:  Tomcat を使用して Centos 環境に SpringBoot WAR パッケージをデプロイする

>>:  ウェブページの画像を素早く表示する方法とテクニック

推薦する

MySQLのMVCCマルチバージョン同時実行制御の実装

1 MVCCとは何かMVCC の正式名称は、マルチバージョン同時実行制御です。データベースへの同時ア...

JavaScriptの原理と方向性

これが何を指しているのかをどのように判断するのでしょうか? ①グローバル環境で呼び出された場合はwi...

MySQLの基礎知識学習ノート

データベースを表示show databases;データベースを作成するDATABASE データベース...

Centos7にnginxをインストールする方法

必要な環境をインストールする1. gccのインストールnginx をインストールするには、公式サイト...

Linux でスペースを含むファイルを削除する (ディレクトリではない)

日常業務では、スペースのないファイルに遭遇することがよくあります。これにより、削除操作がはるかに簡単...

MySQL初心者はグループ化や集計クエリの煩わしさから解放されます

目次1. グループクエリの概略図2. groupbyキーワード構文の詳細な説明3. 簡単なグループク...

JavaScript の setTimeout と setTimeinterval の使用例の説明

どちらの方法も、一定時間後に JavaScript コードを実行するために使用できますが、それぞれに...

MySQL のマスター スレーブ レプリケーション オプションをオンラインで変更する方法

序文: MySQL で最も一般的に使用されるアーキテクチャは、マスター スレーブ レプリケーションで...

MySQL SQL文の特殊処理文のまとめ(必読)

1.テーブル全体を更新します。データ行の列の値が空の場合は、別の列フィールドの値と同じにします。 ...

Vueカスケードドロップダウンボックスの設計と実装

目次1. データベース設計2. フロントエンドページ3. 完全なデモフロントエンド開発では、カスケー...

xshell を使用して VMware で Linux に接続する方法 (2 つの方法)

【序文】最近、ITOO の試験システムのストレステストを行いたいので、自分のコンピュータに Lin...

MySQLクエリキャッシュの簡単な使い方の詳細な説明

目次1. クエリキャッシュの実装プロセス2. クエリキャッシュを構成する3. クエリキャッシュを有効...

最も完全なpackage.json分析

目次1. 概要2. 名前フィールド3. バージョンフィールド4. 説明フィールド5. キーワードフィ...

MySQL の大きなデータ テーブルにフィールドを追加する方法

序文フィールドの追加は誰でもよく知っていると思います。簡単に記述できます。MySQL テーブルにフィ...

JavaScript プログラムのループ構造の詳細な説明

目次構造を選択ループ構造その間…しながらforループ…のために…で…の…のためにまとめループの終了壊...