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

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

推薦する

負のz-indexを持つ要素がクリックできない問題の解決策

最近、ポップアップ広告に取り組んでいました。デフォルト ページには z-index が設定されていな...

エージェントを介したzabbix監視プロセスとポートの詳細なプロセス

環境の紹介オペレーティングシステム: Centos 7.4 Zabbix バージョン: zabbix...

Vueはテーマ切り替えのための複数のアイデアを実装します

目次テーマを動的に変更する最初の方法: 動的コンポーネント2番目の方法はルーティング分離です要約する...

MySQL のフィールドに一意のインデックスを追加および削除する方法

1. PRIMARY KEY(主キーインデックス)を追加するmysql>ALTER TABLE...

Linux システムでの gcc コマンドの使用法の詳細な説明

目次1. 前処理2. コンパイル3. コンパイル4. リンク1. gccのインストール(Ubuntu...

Ubuntu 20.04 LTSの詳細なインストール履歴

この記事では、USB ブート ディスクの作成とシステムのインストールについて説明します。システム構成...

音声キューイングシステムを実装するためのJavaScript

目次導入主な特徴エフェクト表示キーコード導入音声キューイングシステムは、銀行、レストラン、病院などの...

vxe-table を使用して vue で編集可能なテーブルを作成するプロセス

プロジェクトには、オンラインで編集する必要があるテーブルがあります。最初は、要素の el-table...

Linux C++ マルチスレッド同期の非常に詳細な説明

目次1. ミューテックス1. ミューテックスの初期化2. ミューテックスロックの関連特性と分類3. ...

JavaScript タイマー原理の詳細な説明

目次1. setTimeout() タイマー2. setTimeout() タイマーを停止する3. ...

Tomcatが親の委任メカニズムを破壊する方法についての簡単な説明

目次JVM クラスローダーTomcat クラスローダークラスを検索ロードクラスクラスをロードしようと...

VUEはG2チャートを使用した実装を導入します

目次G2チャートについて使用テンプレートで使用される完全なコード (棒グラフ)世界地図を追加するG2...

case when文のエラー問題の詳細な説明

序文MySQL データベースでは、if else のような判断演算を使用することがあります。では、M...

Reactは複雑な検索フォームの展開と折りたたみ機能を実装します

時間に余裕を持って、過去を忘れましょう。前のセクションでは、[検索] フォームとクエリおよびリセット...

JavaScript 文字列の一般的なメソッドの詳細な説明

目次1. キャラクター文法パラメータ索引戻り値2. 連結文法パラメータ文字列2 [, …文字列N]戻...