【发布时间】:2018-06-16 15:01:58
【问题描述】:
我对 SQL 代码非常陌生,我只选择了几列并且主要使用 GROUP BY 函数,但我的代码需要 2 分钟才能显示结果,也许它不是一个长查询,但我需要更快。如何更快地进行 SQL 查询?
对于我的代码,我有一个包含联赛比赛的表格;
例如:
CustomerID MatchDate League Matches HomeTeam AwayTeam
------------------------------------------------------------------------------------------------------------------------
1 11-12-2006 La Liga Barcelone-R.Madrid Barcelona RealMadrid
2 10-10-2006 Premier League Everton-Arsenal Everton Arsenal
3 09-10-2006 Premier League Arsenal-Tottenham Barcelona RealMadrid
4 10-10-2006 Bundesliga Bayern-Mainz Bayern MainZ
我的目标是,计算主队和客队的每场比赛的总 ID,以便按联赛、球队和赛季查找每支球队和小组的总观看次数。 同一支球队可以是 HomeTeam 和 AwayTeam,所以我使用了这段代码。
SELECT League, SUM(totalnum), Teams, Season FROM
(
(SELECT DATE_FORMAT(MatchDate, '%Y') as 'Season', HomeTeam as Teams, League, count(distinct CustomerID) as "totalnum"
FROM MY_TABLE GROUP BY League, Teams, Season )
UNION ALL
(SELECT DATE_FORMAT(MatchDate, '%Y') as 'Season', AwayTeam as Teams, League, count(distinct CustomerID) as "totalnum"
FROM MY_TABLE GROUP BY League, Teams, Season )
) aa
GROUP BY League, Teams, Season
ORDER BY totalnum DESC
我可以得到结果,但我需要更短。哪些点会影响我的查询。
【问题讨论】:
-
表格有多少行?
-
确保您的查询有索引。
-
几乎一百万行
-
索引将没有用,OP 需要所有行 - 没有“where 子句”
-
@GerardH.Pille 你的 30 年,我的 15 年,都无所谓。我已经看到经验证据表明,使用
FULL INDEX SCAN比使用FULL TABLE SCAN可以更便宜地解决一组案例。关于索引维护成本的说明,这是比一个查询更广泛的讨论:数据写入的频率以及增加的成本是多少,执行查询的频率以及节省的成本是多少,索引是否有益于其他查询,触发器/派生表/等会是更好的解决方案吗? ALL 索引会产生写入成本,听起来你提出了一个稻草人的论点。
标签: mysql sql query-performance