我目前的查詢看起來像這樣。我一直在試圖優化它,但到目前爲止我還沒有運氣。 我的目標是讓每個玩家獲得當日和前一天之間stat_value的差異,然後對其進行排序。 目前的代碼工作正常,但我覺得沒有優化。 The?值使用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
這是包含日常數據的表格。
CREATE TABLE IF NOT EXISTS leaderheadsplayersdata_daily
(player_id INTEGER NOT NULL
,stat_value DOUBLE NOT NULL
,stat_type VARCHAR(16) NOT NULL
,day INTEGER NOT NULL
,FOREIGN KEY (player_id) REFERENCES leaderheadsplayers(player_id) ON DELETE CASCADE
,PRIMARY KEY(player_id, stat_type, day)
) ENGINE = InnoDB
在此先感謝
描述你的表格結構將有助於建議回答 – evilpenguin
新增數據庫結構。 –
你能提供在查詢中使用EXPLAIN的輸出嗎? – ultrajohn