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コマンドを使用してファイルの内容を表示します

推薦する

Swiper+echartsは複数のダッシュボードの左右スクロール効果を実現します

この記事では、ダッシュボードの左右スクロール効果を実現するためのスワイパー+echartsの具体的な...

SSHパスワードフリーログイン設定方法の詳しい説明(画像とコマンド)

まず、私たちがやりたいことは、serverA の usera を使用して、パスワードなしで serv...

webpackを使用してTypeScriptコードをパッケージ化およびコンパイルする方法を教えます

TypeScript バンドルwebpack 統合通常、実際の開発では、ビルド ツールを使用してコー...

Windows Server 2008 R2 に MySQL 5.7.10 をインストールする手順

MSIインストールパッケージを使用してインストールするご使用のオペレーティング システムに応じて、対...

vitrualBox+ubuntu16.04 python3.6 最新チュートリアルと詳細な手順のインストール

最近ディープラーニングを学ぶためにUbuntu+Python 3.6バージョンを使う必要があるため、...

MySQLサービスを開くおよび閉じる2つの方法

方法1: cmdコマンドを使用するまず、DOS ウィンドウを開き、スタート、実行、cmd と入力しま...

メニューのホバー効果を実現するCSS3

結果: html <nav id="nav-1"> <a cl...

サーバー上で Nginx を使用して Springboot プロジェクトをデプロイする方法の詳細なチュートリアル (jar パッケージ)

1. Javaプロジェクトをjarパッケージにパッケージ化するここではMavenツールを使用します...

nginxサーバーのダウンロード、インストール、使用方法の詳細な説明

ダウンロードhttp://nginx.org/en/download.html解凍ダウンロードしたn...

Vue.jsのレンダリング関数の使い方の詳しい説明

Vue では、ほとんどの場合、テンプレートを使用して HTML を作成することを推奨しています。ただ...

検証例 MySQL | 同じ値を持つフィールドを更新すると、binlog に記録されます

1. はじめに数日前、開発仲間から、フィールドを同じ値に更新すると binlog が記録されるかどう...

Bash で山括弧を使用するその他の方法

序文この記事では、山括弧のその他の用途をさらに詳しく見ていきます。前回の記事では、山括弧 (<...

Vue における {{}}、v-text、v-html の違いと用途の詳細な説明

{ {}} 値を取得すると、タグの元のコンテンツはクリアされませんv-textは値を取得し、タグの元...

JavaScriptのアンチシェイクとスロットリングとは

目次1. 関数デバウンス1. 画像安定化とは何ですか? 2. 関数のスロットリング2.1 タイマーの...

Dockerコマンドの自動補完の実装

序文この友人がどれくらいDockerを使っていなかったのかは分かりませんが、突然Dockerコマンド...