我有两个表(MySQL,InnoDB),它们彼此相同,包含一些分数信息。我想从这两者中创建一个排行榜。与表 2 相比,表 1 中的分数具有更多的重量 (^2)。
一种策略是使用 UNION 语句编写 SQL 查询并即时获取结果,另一种策略是创建另一个表并及时将两个表中的数据插入到该表中。(例如 Cron-Job)
我的问题是这个 UNION 查询会有多贵?
SELECT
username,
specialId,
SUM(correct) points,
IFNULL((SUM(foracc) / SUM(completegames)), 0) accuracy
FROM
((SELECT
u.username,
u.specialId,
POW(p.correct, 2) as correct,
p.correct as foracc, #to calcuate accuracy
p.completegames
FROM
Table_01 p
LEFT JOIN users u ON u.userid = p.userid
WHERE
p.year = 2012 AND p.type = 1) UNION (SELECT
u.username,
u.specialId,
p.correct,
p.correct as foracc, #to calcuate accuracy
p.completegames
FROM
Table_02 p
LEFT JOIN users u ON u.userid = p.userid
WHERE
p.year = 2012 AND p.type = 1)) AS Table_aggregatedscore
GROUP BY 1
ORDER BY points DESC , acc DESC
LIMIT 10;
Table_01 和 Table_02 都有超过 2000 万行。
PS。我没有时间/能力对这两件事进行基准测试。