我有一个MySql查询的问题
两张桌子。
人员标签(25000条记录)
persid (主键)
voornaam
tussenvoegsel
achternaam (索引)
列队标签(370000条记录)
Opstelkey (主键)
宽度
永久
volgorde
gesp
gesc
SELECT sum(o.gesc) as totgescoord,p.achternaam
FROM opstelere1 o,personen1 p
where o.persid=p.persid
group by o.persid查询6809以上的结果总计,查询持续时间0,0176秒
添加Order By后,查询的运行速度会慢很多。
SELECT sum(o.gesc) as totgescoord,p.achternaam
FROM opstelere1 o,personen1 p
where o.persid=p.persid
group by o.persid
order by totgescoord desc结果此查询共6809个,查询持续时间2,7740秒
使用persid仅在Line Ups表上查询
SELECT o.persid,sum(o.gesc) as totgescoord
FROM opstelere1 o
group by o.persid
order by totgescoord desc Resultaat Query 6809 totaal,查询持续时间0,1732秒,但很高兴看到的是名称而不是永久it ;-)
发布于 2021-03-08 08:47:11
将查询从内到外翻转。这样,它就可以从GROUP BY开始。这使得它在接触另一个表之前将370000行压缩为6809行。那么在另一个表中只有6809个查找,而不是370000个。
SELECT o2.totgescoord,
p.achternaam
FROM ( SELECT persid, SUM(gesc) AS totgescoord
FROM opstelere1
GROUP BY persid ) AS o2
JOIN personen1 AS p ON p.persid = o2.persid
ORDER BY o2,totgescoord DESC;此外,opstelere1还需要INDEX(persid, gesc) (按此顺序)。
你的查询是一个分解-内爆的例子。
https://stackoverflow.com/questions/66516067
复制相似问题