Sql Join花了很多时间

时间:2016-01-21 04:33:10

标签: mysql sql

我想要执行此查询但是花费的时间超过5小时,但数据库大小只有20mb。这是我的代码。在这里,我将使用reg_id加入11个表。我需要具有不同值的所有列。请指导我如何重新排列查询。

SELECT * 

FROM degree

JOIN diploma 
 ON degree.reg_id = diploma.reg_id
JOIN further_studies 
 ON diploma.reg_id = further_studies.reg_id
JOIN iti 
 ON further_studies.reg_id = iti.reg_id
JOIN personal_info 
 ON iti.reg_id = personal_info.reg_id
JOIN postgraduation 
 ON personal_info.reg_id = postgraduation.reg_id
JOIN puc 
 ON postgraduation.reg_id = puc.reg_id
JOIN skills 
 ON puc.reg_id = skills.reg_id
JOIN sslc 
 ON skills.reg_id = sslc.reg_id
JOIN license 
 ON sslc.reg_id = license.reg_id
JOIN passport 
 ON license.reg_id = passport.reg_id
GROUP BY fullname

如果我有任何错误,请帮帮我

2 个答案:

答案 0 :(得分:6)

评论时间有点长。

您的查询的第一个问题是您使用select * group by fullname。您在select中有数以万计的列不在group by中。除非你真的,真的,真的知道你在做什么(我怀疑),这是编写查询的错误方法。

您的性能问题无疑是由于笛卡尔产品和缺乏索引。您正在加入不同的维度 - 例如技能和学位。结果是所有可能性的产物。对于某些人来说,数据大小可以增长,增长和增长。

然后,问题是:你在连接中使用的键上有索引吗?为了提高性能,通常需要这样的索引。

答案 1 :(得分:0)

我认为问题出在查询中。首先确保按姓名分组并尝试提供一些列名而不是*