MySQLクエリステートメント内のユーザー変数のコード分析

MySQLクエリステートメント内のユーザー変数のコード分析

前回の記事では、MySQL 最適化の概要 - クエリの合計数を紹介しました。この記事では、クエリ ステートメントに関するもう 1 つの知識、つまりユーザー変数のコード解析について説明します。

コードから始めましょう

`notice`.`id`、`notice`.`fid`、`notice`.`has_read`、`notice`.`notice_time`、`notice`.`read_time`、`f`.`fnum`、`f`.`forg`、`f`.`fdst`、`f`.`actual_parking` を `parking`、`f`.`scheduled_deptime`、`f`.`estimated_deptime`、`f`.`actual_deptime`、`f`.`scheduled_arrtime`、`f`.`estimated_arrtime`、`f`.`actual_arrtime`、`f`.`is_vip`、`f`.`aoc_notice` として選択します。
から (
  選択
  t.id、 
  t.fid、 
  t.has_read、 
  t.通知時間、 
  t.読み取り時間
  から
  (
    選択
    援助、 
    a.fid、 
    a.has_read、
    通知時間、 
    a.読み取り時間、
    @v_rownum := @v_rownum+1、
    if(@v_fid=a.fid,@v_rowid:=@v_rowid+1,@v_rowid:=1 ) を row_count として、
    @v_fid:=a.fid
    から
    (
      選択
      id、 
      フィド、 
      読んだ、 
      通知時間、 
      読み取り時間 
      vkm_user_notice_flight より
      ここで、`notice_type` = 'process_update'、uid=82
      fid、notice_time 降順で並び替え
    )a、
    (
      @v_rownum:=0、@v_rowid:=0、@v_fid:=null を選択
    )b
  )
  ここで、t.row_count = 1
) `通知`として
`vkm_flight` を `f` として `notice`.`fid` = `f`.`id` に左結合します。
`vkm_parking` を `parking` として `f`.`actual_parking` = `parking`.`parking_num` に左結合します

友人が仕事中にこのような SQL ステートメントを送ってきたのですが、最初は混乱してまったく理解できませんでした。私は MySQL にあまり精通していないので、簡単な追加、削除、変更しかできません。実際、上記のコードは非常に直接的に書かれています。

`notice`.`id`、`notice`.`fid`、`notice`.`has_read`、`notice`.`notice_time`、`notice`.`read_time`、`f`.`fnum`、`f`.`forg`、`f`.`fdst`、`f`.`actual_parking` を `parking`、`f`.`scheduled_deptime`、`f`.`estimated_deptime`、`f`.`actual_deptime`、`f`.`scheduled_arrtime`、`f`.`estimated_arrtime`、`f`.`actual_arrtime`、`f`.`is_vip`、`f`.`aoc_notice` として選択します。
`notice` から `vkm_flight` を `f` として `notice`.`fid` = `f`.`id` に `vkm_parking` を `parking` として `f`.`actual_parking` = `parking`.`parking_num` に LEFT JOIN します。

しかし、上記のコードのクエリ効率は本当に異なります。上記の具体的なコードが理解できず、指導を求めていますが、Baiduで検索したところ、1つはmysqlでのifの使用であり、もう1つはmysqlでのユーザー変数の使用であることがわかりました。

ユーザー名は、set var value または上記の形式 @var:=val; で設定できます。

mysql での if の使用 if(exp1,exp2,exp3) if では、exp1 が true の場合は exp2 を実行し、それ以外の場合は exp3 を実行します。

上記のコードを見ると、はるかに簡単にわかるかもしれません。上記のコードに基づいて、簡単なアプリケーションの例をもう一度書きました

vkm_flight から id、fnum、forg、fdst、@v_rownum:=@v_rownum+1 を選択、(@v_rownum:=0 を選択) b

これは@v_rownumの値を返します

要約する

以上が、MySQL クエリ ステートメント内のユーザー変数のコード分析に関するこの記事の内容のすべてです。皆様のお役に立てれば幸いです。興味のある方は、引き続きこのサイトを参照してください: MySQL での or ステートメントの使用例、MySQL データ型 DECIMAL(N,M) の N と M の意味の詳細な説明など。質問がある場合は、いつでもメッセージを残していただければ、編集者がすぐに返信します。このサイトをサポートしてくれた友人たちに感謝します!

以下もご興味があるかもしれません:
  • mysql 変数の使用例の分析 [システム変数、ユーザー変数]
  • MySQL ユーザー変数と set ステートメントの例の詳細な説明

<<:  VMware Workstation 12 Pro Linux インストール チュートリアル

>>:  VUE+Canvasは、インゴットを受け取る富の神のゲームを実装します

推薦する

Tomcat メモリ オーバーフロー問題の解決経験

少し前に、製品バージョンをテスト用にテスターに​​提出したのですが、テスト結果はまったく予想外のもの...

MySQLのネクストキーロックのロック範囲についての簡単な説明

序文ある日、突然 MySQL の次のキー ロックについて尋ねられ、私の即座の反応は次のようなものでし...

Webpack で環境変数を使用するためのさまざまな正しい姿勢

目次前に書いてビジネスコードは環境変数を使用するwebpack.DefinePlugin プラグイン...

CSS3 オーバーフロープロパティの説明

1. オーバーフローOverflow はオーバーフロー(コンテナ)です。コンテンツがコンテナを越える...

Web 開発 js 文字列連結プレースホルダーと conlose オブジェクト API の詳細な説明

目次プレースホルダーの置き換えコンソール印刷テーブル()ログ、情報、警告、エラーグループ()、グルー...

docker リモート API のワンクリック TLS 暗号化の実装

目次1. Docker の 2375 ポートを別のポートに変更します。これは一時的な対策にすぎません...

Win10 での MySQL 8.0.16 のインストールと設定のチュートリアル

1. MySQL 8.0.16を解凍する次の図に示すように、解凍後にdadaフォルダとmy.ini構...

DockerにRabbitMQをインストールする詳細な手順

目次1. 鏡を見つける2. RabbitMQイメージをダウンロードする3. RabbitMQコンテナ...

Docker環境を構築する簡単な方法

まず、Docker とは何かを理解しましょう。 Docker は、アプリケーションをデプロイするため...

複数サーバーの負荷分散を実現するためのNginx構成

Nginx ロード バランシング サーバー: IP: 192.168.0.4 (Nginx-Serv...

両端の CSS レイアウトのサンプルコード (親の負のマージンを使用)

最近、開発中に両端が揃ったレイアウトに遭遇しました。レイアウトはパーセンテージに基づいていました。以...

MySQL シリーズ 6 のユーザーと認証

目次チュートリアルシリーズ1. ユーザー管理1. ユーザーアカウント2. アカウントの追加と削除3....

Alibaba Cloud Server に MySQL データベースをインストールする詳細なチュートリアル

目次序文1. MySQLをアンインストールする2. MySQLをインストールする要約する序文学習中に...

CSSプリコンパイル言語とその違いの詳細な説明

1. 何ですか マークアップ言語として、CSSは比較的シンプルな構文とユーザーに対する要件が低いが、...

JavaScript はスローモーションアニメーションのカプセル化と使用法を説明します

プロセス分析の実装(1)繰り返して電話をかけるには?答え: 関数をカプセル化して一度だけ呼び出すコー...