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

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

推薦する

CSS で点線の境界線のスクロール効果を実装するサンプルコード

マウスをある領域の上に置くと、その領域に点線の境界線と線のアニメーションが表示されるというクールな効...

Dockerで複数のSpringbootを実行するための詳細なチュートリアル

Dockerは複数のSpringbootを実行する1番目: ポートマッピング 2番目: メモリサイズ...

Linux コンパイル最適化で習得しなければならないいくつかの姿勢のまとめ

01. コンパイルオプションとカーネルコンパイルLinux カーネル (英語: linux kern...

Centos7 FFmpeg オーディオ/ビデオ ツールのインストールに関する簡単なドキュメント

ffmpeg は非常に強力なオーディオおよびビデオ処理ツールです。公式 Web サイトは http:...

FTP、FTPS、SFTPの違いについて簡単に説明します

目次FTP、FTPS、SFTP の概要FTP FTPS FTPサーバーFTPソフトウェアのアクティブ...

MySQL 8.0.22 zip圧縮パッケージ版(無料インストール)のダウンロード、インストール、および構成手順の詳細

目次最初のステップはMySQLをダウンロードすることですステップ2: ダウンロードした圧縮パッケージ...

メッセージボードにメッセージを追加および削除するための JavaScript

この記事では、JavaScript メッセージ ボードでメッセージを追加および削除する小さな例を詳細...

画像内のrarファイルを隠す方法

このロゴを .rar ファイルとしてローカルに保存し、解凍して効果を確認することができます。よりシン...

MySQL の undo、redo、binlog の違いを簡単に分析します

目次序文【ログ取り消し】 【REDOログ】 【バイナリログ】要約する序文MySQL には、REDO ...

知っておくべき 18 の Web ユーザビリティの原則

世界最高のビジュアル デザイン スキルを持っていたとしても、訪問者がページ間やアイテム間を快適に移...

React.js フレームワーク Redux 基本ケースの詳細な説明

react.js フレームワーク Redux https://github.com/reactjs/...

react-diagram シリアル化 Json 解釈 ケース分析

このドキュメントの目的はreact-diagramフレームワーク モデルの Json シリアル化を説...

MySQL5.7 mysqldump バックアップとリカバリの実装

MySQL バックアップコールドバックアップ:停止服務進行備份,即停止數據庫的寫入ホットバックアップ...