私の現在のクエリは次のようになります。私はそれを最適化しようとしてきましたが、私は今まで運がありませんでした。 私の目標は、各プレイヤーの現在の日と前日の間のstat_valueの差を取得し、それを注文することです。 現在のコードは正常に動作しますが、私には最適化されていません。 ?値はJavaを使用して入力されます。複数の行にわたるMySQLクエリの最適化
SELECT t1.stat_value -
(SELECT stat_value
FROM leaderheadsplayersdata_daily t2
WHERE t2.player_id = t1.player_id
AND t2.day = ?
AND t2.stat_type = ?
LIMIT 1
) as sum
, (SELECT name
FROM leaderheadsplayers
WHERE leaderheadsplayers.player_id = t1.player_id
LIMIT 1
)
FROM leaderheadsplayersdata_daily t1
WHERE day = ?
AND stat_type = ?
ORDER
BY sum DESC LIMIT 100
表構造:
これは、プレイヤID及びユーザ名を含むメインテーブルです。
CREATE TABLE IF NOT EXISTS `leaderheadsplayers`
(player_id INTEGER PRIMARY KEY AUTO_INCREMENT
,uuid VARCHAR(36) NOT NULL UNIQUE
,name VARCHAR(16) NOT NULL
,last_join DATETIME
) ENGINE = InnoDB
これは、毎日のデータを含む表です。あなたはわずか2日間を持っているので、事前
テーブル構造を記述すると、回答が示唆されます。 – evilpenguin
データベース構造が追加されました。 –
クエリにEXPLAINを使用した出力を提供できますか? – ultrajohn