SELECT DrawID, KindID, ServerID, TableID, UserCount, AndroidCount, Waste, Revenue, UserMedal, StartTime, ConcludeTime, InsertTime, KindName, ServerName,
sum(Score) AS Score, max(BackScore) AS BackScore, BackInsureScore, gameid, accounts, nickname, lastlogonip, LastLogonType, userID
FROM (SELECT A.DrawID, A.KindID, A.ServerID, A.TableID, A.UserCount, A.AndroidCount, A.Waste, A.Revenue, A.UserMedal, A.StartTime, A.ConcludeTime,
A.InsertTime, B.KindName, C.ServerName, sum(D .Score) AS Score, CASE A.KindID WHEN 108 THEN max(d .BackScore - Score)
ELSE d .BackScore END AS BackScore, D .BackInsureScore, E.gameid, E.accounts, E.nickname, E.lastlogonip, E.LastLogonType, E.userID
FROM RecordDrawInfo AS A LEFT JOIN
GameKindItem AS B ON A.KindID = B.KindID LEFT JOIN
GameRoomInfo AS C ON A.ServerID = C.ServerID JOIN
RecordDrawScore AS D ON A.DrawID = D .DrawID LEFT JOIN
AccountsInfo AS E ON D .UserID = E.userID
GROUP BY A.DrawID, A.KindID, A.ServerID, A.TableID, A.UserCount, A.AndroidCount, A.Waste, A.Revenue, A.UserMedal, A.StartTime, A.ConcludeTime,
A.InsertTime, B.KindName, C.ServerName, D .Score, D .BackInsureScore, E.gameid, d .backinsurescore, e.accounts, E.nickname, E.lastlogonip,
E.LastLogonType, E.userID, d .BackScore) AS tab
GROUP BY DrawID, KindID, ServerID, TableID, UserCount, AndroidCount, Waste, Revenue, UserMedal, StartTime, ConcludeTime, InsertTime, KindName, ServerName,
BackInsureScore, gameid, accounts, nickname, lastlogonip, LastLogonType, userID
HAVING sum(Score) != 0
这里其中,RecordDrawInfo 28W数据,RecordDrawScore 25W数据量,其他表只有不到3000的数据量。
现在这个SQL 查询需要10多秒, 我加了聚集索引,要15秒。
30W的数据量 不应该会出现这么久的查询。
希望大佬们给个解决方法