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 パッケージをデプロイする

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

推薦する

Docker ベースの ELK を素早く構築する方法

[概要] この記事では、自作の Docker プラットフォームをベースに完全な ELK システムを素...

Docker 学習: コンテナ コンテナの具体的な使用方法

コンテナは Docker のもう一つの中心的な概念です。簡単に言えば、コンテナとは、独立して実行され...

Mac ノードの削除と再インストールのケーススタディ

Macノードの削除と再インストール消去 ノード -v sudo npm アンインストール npm -...

MySQL のデッドロック チェックとデッドロック除去の例の詳細な説明

1. クエリプロセスプロセスリストを表示2. 対応するプロセスを照会し、IDを強制終了します。検証(...

なぜCSSをヘッドタグに配置する必要があるのか

考えてみてください。なぜcss 、 javascriptのようにbodyタグの末尾ではなく、 hea...

React Nativeでaxiosを使用してネットワークリクエストを行う方法

フロントエンド開発では、Ajax、jQuery ajax、axios、fetch など、データ要求を...

このようなシェル スクリプトを使用して、多数の MySQL データベースを強制終了します (推奨)

朝早くに電話で起こされました。あるプロジェクトのデータベースがダウンしていて起動できないとのことでし...

収集する価値のあるCSS命名規則(ルール) よく使われるCSS命名規則

CSS命名規則(ルール) よく使われるCSS命名規則ヘッダー: ヘッダーコンテンツ: コンテンツ/コ...

ナビゲーションデザインと情報アーキテクチャ

<br />ナビゲーションについて話すときは、ほとんどの場合、ナビゲーションがコンテンツ...

Dockerfile を使用したカスタムイメージの構築の実装

目次序文Dockerfile の紹介Dockerfileはイメージプロセスを構築するDockerfi...

Dockerデータを完全にクリーンアップする方法

目次定期的に剪定するミラーエビクションコンテナのクリーンアップネットワークソート体積の蒸発完全にクリ...

mysql+mycat、負荷分散、マスタースレーブレプリケーション、読み取り/書き込み分離操作に基づく安定した高可用性クラスタを構築します。

データベースのパフォーマンス最適化には、一般的にクラスタリングが採用されています。Oracle クラ...

Vue3 でタイマーコンポーネントをカプセル化する方法

背景一部のショッピング モールの Web ページで商品の詳細を開くと、購入数量を選択するためのカウン...

Javascript のスコープとクロージャの詳細

目次1. 範囲2. スコープチェーン3. 語彙の範囲5. 閉鎖の適用6. クロージャの欠陥7. 閉会...

Linuxで大きなファイルを素早くコピーする方法

データをコピーリモートでデータをコピーする場合、通常は rsync コマンドを使用しますが、小さなフ...