我试图在PHP脚本中的技能表中获得个人技能的总和。
表为InnoDB,有~2m条记录,结构为:skills (id,cand_id,skillname,score)
我有一个查询的例子是:select SUM(score) as skillscore FROM skills WHERE cand_id = "6509" AND skillname in ("Cascading Style Sheets","jQuery","Personal Home Page","MySQL","JavaScript","HTML","Android","industry~it")
查询大约需要0.0006秒,但有50,000人要循环,所以需要一段时间!
我怎样才能把速度提高10倍?
谢谢。
您正在为每个cand_id进行查询,在循环中触发查询是您的瓶颈。
正如两个人已经告诉你的那样,在查询结束时使用GROUP BY cand_id语句,您将获得性能和不需要的代码。
您需要在一个查询中计算所有值…
select cand_id, SUM(score) as skillscore
FROM skills
WHERE skillname in ("Cascading Style Sheets","jQuery","Personal Home Page","MySQL","JavaScript","HTML","Android","industry~it")
GROUP BY cand_id
您正在请求GROUP BY。这个查询将列出每个唯一的cand_id,它将总结每个cand_id的所有分数。
SELECT cand_id, SUM(score) as skillscore
FROM skills WHERE skillname in
("Cascading Style Sheets","jQuery",
"Personal Home Page","MySQL","JavaScript","HTML","Android","industry~it")
GROUP BY cand_id