當我在phpMyAdmin中運行查詢時,它最多返回0.3s內的結果。通常0.19s ish是正常的。它似乎並沒有像查詢使用太多的CPU,但我的託管服務提供商告訴我,它消耗了很多。MySQL查詢消耗5-6倍正常CPU使用量
我在想,如果UNION ALL
是這個問題的罪魁禍首,或者是一般查詢的複雜性。任何洞察力將不勝感激。
這裏的查詢:
SELECT unitId, unitName, createDate
FROM (
(SELECT game_player.unitId as unitId, unit.name as unitName, game.createDate as createDate
FROM `game_player`
LEFT JOIN `game` ON game_player.gameId = game.id
LEFT JOIN `unit` ON game_player.unitId = unit.id
WHERE game_player.playerId = 123
AND game.createDate > 1390953600000
AND game_player.unitId NOT IN (SELECT unitId FROM unit_free))
UNION ALL
(SELECT game_player.unitId as unitId, unit.name as unitName, game.createDate as createDate
FROM `game_player`
LEFT JOIN `game` ON game_player.gameId = game.id
LEFT JOIN `unit` ON game_player.unitId = unit.id
WHERE game_player.playerId = 123
AND game.type = '5')
)
AS results
WHERE unitId NOT IN (SELECT unitId FROM player_units WHERE playerId = 123)
GROUP BY unitName
game
是遊戲列表
game_player
是在一個特定的遊戲
unit
的球員名單中的單位列表,玩家可以使用
unit_free
是玩家可以玩的免費單位列表
player_units
是玩家擁有的已知單位列表
Ahhh,關於'IN'的提示很少優化,而使用'LEFT OUTER JOIN'而不是我正在尋找的東西。只要返回符合條件的所有單位中的一個條目,就返回「unitName」和「createDate」,這並不重要。最後,''game_player.unitId'會一直出現在'unit.id'中。 – Rawr
哦!你能否包括CPU和不同操作的時間成本的分解,或者將我鏈接到具有此信息的站點。我想知道通過進行某些操作而犧牲了什麼CPU和時間。謝謝! – Rawr
增加了一個建議。害怕我不能真正幫你打破時間,等等。 – Kickstart