MYSQL サブクエリとネストされたクエリの最適化例の分析

MYSQL サブクエリとネストされたクエリの最適化例の分析

ゲーム史上最高スコアトップ100をチェック

SQLコード

cdb_playsgame ps から ps.* を選択 WHERE ps.credits=(select MAX(credits)  
cdb_playsgame ps1より  
ここで、ps.uid=ps1.uid かつ ps.gametag=ps1.gametag) かつ ps.gametag='yeti3'  
GROUP BY ps.uid order by ps.credits desc LIMIT 100;

SQLコード

選択 ps.*  
cdb_playsgame psから、(ps1.uid、ps1.gametag、クレジットとしてMAX(credits)を選択) 
cdb_playsgame ps1 から uid、gametag でグループ化) t 
ここで、ps.credits=t.credits かつ ps.uid=t.uid かつ ps.gametag=t.gametag かつ ps.gametag='yeti3'  
GROUP BY ps.uid order by ps.credits desc LIMIT 100;

実行時間はわずか 0.22 秒で、元の 25 秒の 10,000 倍の高速化です。

その日の最高のゲームスコアをチェック

SQLコード

 ps. *、mf. *、m.usernameを選択します 
cdb_playsgame psより 
LEFT JOIN cdb_memberfields mf ON mf.uid = ps.uid 
cdb_members m を m.uid = ps.uid に左結合します 
ここで、ps.gametag = 'chuansj' 
AND FROM_UNIXTIME( ps.dateline, '%Y%m%d' ) = '20081008' 
そして ps.credits = ( 
選択MAX( ps1.credits ) 
cdb_playsgame ps1より 
ここで、ps.uid = ps1.uid 
かつ ps1.gametag = 'chuansj' 
AND FROM_UNIXTIME( ps1.dateline, '%Y%m%d' ) = '20081008' ) 
グループ化 ps.uid 
クレジット順で並べ替え 
制限 0 , 50

クエリのように:

AND ps.credits=(SELECT MAX(ps1.credits)  
 {$tablepre}playsgame ps1 から、ps.uid=ps1.uid かつ ps1.gametag = '$game'  
 AND FROM_UNIXTIME(ps1.dateline, '%Y%m%d') = '$todaytime' )

特に時間がかかる

また、次のようにもします:

FROM_UNIXTIME(ps1.dateline, '%Y%m%d') = '$todaytime'

このようなステートメントでは、各データ行の値を関数を使用して計算し、次のように調整する必要があるため、インデックスが無効になります。

SQLコード

かつ、ps1.dateline >= UNIX_TIMESTAMP('$todaytime')

//変更後
SQLコード

 ps. *、mf. *、m.usernameを選択します 
cdb_playsgame ps、cdb_memberfields mf、cdb_members m、(から 
 
SELECT ps1.uid, MAX( ps1.credits ) AS credits 
cdb_playsgame ps1より 
ここで、ps1.gametag = 'chuansj' 
かつ、ps1.dateline >= UNIX_TIMESTAMP( '20081008' ) 
グループ化 ps1.uid 
) として 
ここで、mf.uid = ps.uid 
かつ、m.uid = ps.uid 
かつ ps.gametag = 'chuansj' 
かつ ps.credits = t.credits 
かつ ps.uid = t.uid 
グループ化 ps.uid 
クレジット順で並べ替え 
制限 0 , 50

各プレーヤーについて、プレーヤー番号、名前、受けた罰金の数を調べます。ただし、少なくとも 2 回の罰金を受けたプレーヤーのみを調べます。

よりコンパクトなクエリの場合は、FROM 句にサブクエリを配置します。

SQLコード

プレーヤー番号、名前、番号を選択 
(PLAYERNO、NAME、 
       (選択カウント(*) 
       ペナルティから 
       PENALTIES.PLAYERNO = の場合 
          プレイヤーズ.プレイヤーNO) 
       番号として 
    プライヤーから)PNとして 
数値>=2の場合

FROM 句のサブクエリは、各プレーヤーのプレーヤー番号、名前、およびペナルティ番号を決定します。次に、この番号は中間結果の列になります。次に条件が指定され (NUMBER>=2)、最後に SELECT 句内の列が取得されます。

要約する

以上が、MYSQL サブクエリとネストされたクエリの最適化例の分析に関するこの記事の内容のすべてです。皆様のお役に立てれば幸いです。興味のある方は、MySQL IN ステートメントの遅いサブクエリの効率を最適化する手法の例、MySQL サブクエリの union と IN の効率に関する簡単な説明などを参照してください。不備がある場合は、メッセージを残してください。編集者が適時に修正します。

123WORDPRESS.COM をサポートしてくださっている皆様、ありがとうございます!

以下もご興味があるかもしれません:
  • MySQL の列サブクエリと行サブクエリ操作に関するチュートリアル
  • MySql のサブクエリ内のクエリ例の詳細な説明
  • MySQL のサブクエリの例
  • MySQL サブクエリ (ネストされたクエリ)、結合テーブル、複合クエリの詳細な説明
  • MySQL チュートリアル: サブクエリの例の詳細な説明

<<:  jsはaudioContextを通じて3Dサウンド効果を実現します

>>:  Linuxでmore、less、catコマンドを使用してファイルの内容を表示します

推薦する

Dockerネットワーク作成に--subnetを追加した後の問題を解決する

Docker ネットワークの作成に –subnet を追加した後、docker network ls...

Navicat がリモートで SQL Server に接続し、MySQL に変換する詳細な手順

序文最近、プロジェクトで SQL Server を使用するプログラムに遭遇しました。このデータベース...

Axios の二次カプセル化の例 プロジェクトのデモ

1. なぜパッケージングを行うのですか?全体的なコード呼び出し、リクエストの公開処理、パーソナライズ...

1 つの記事で JSON (JavaScript Object Notation) を理解する

目次JSONが登場JSON構造JSONオブジェクトJson オブジェクトと JavaScript オ...

MySQL 接続例外とエラー 10061 の解決方法

MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...

vsftpd ユーザーが ssh 経由でログインすることを禁止する方法

序文vsftp は使いやすく安全な FTP サーバー ソフトウェアです。システムユーザーまたは仮想ユ...

親子コンポーネントの通信を解決するための3つのVueスロット

目次序文環境の準備カテゴリコンポーネントアプリのコンポーネント1. デフォルトスロット2. 名前付き...

WeChatアプレットwebViewにH5を埋め込む方法の例

序文WeChat ミニプログラムは新しいオープン機能を提供します!ついにミニプログラムにHTMLペー...

国内SNSのホームページを比較・分析して得た経験をみんなで共有(写真)

この記事では、ソーシャル ウェブサイトのホームページを比較分析することで洞察を得て、ソーシャル ウェ...

HTML ウェブページのブラウザタイトルバーに小さなアイコンを表示する方法

この効果と同様に、方法も非常に簡単です。ヘッダーに次のように記述します: <link rel=...

Win10 への MySQL 5.7 のインストール MSI 版のチュートリアル(画像とテキスト付き)

主にインストール後に my.ini ファイルを確認するために、msi 形式でインストールしました。フ...

Docker を使用して Jenkins をインストールするためのサンプル コード

Dockerコンテナのインストール時に遭遇しやすい2つの問題1.ポートはすでに割り当てられています(...

Docker のコンテナ データ ボリュームの概要

目次Dockerコンテナのデータ量データボリュームの使用方法1: コマンド-vを使用して直接マウント...

Dockerコンテナのエクスポートとインポートの例

目次DockerコンテナのエクスポートDockerコンテナのインポ​​ートこの記事では主に、コンテナ...

Linux 上の MariaDB は root ユーザーで起動します (推奨)

最近、セキュリティ製品をテストする必要があったため、mariadb の起動ユーザーを root に調...