我想要执行此查询但是花费的时间超过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
如果我有任何错误,请帮帮我
答案 0 :(得分:6)
评论时间有点长。
您的查询的第一个问题是您使用select *
group by fullname
。您在select
中有数以万计的列不在group by
中。除非你真的,真的,真的知道你在做什么(我怀疑),这是编写查询的错误方法。
您的性能问题无疑是由于笛卡尔产品和缺乏索引。您正在加入不同的维度 - 例如技能和学位。结果是所有可能性的产物。对于某些人来说,数据大小可以增长,增长和增长。
然后,问题是:你在连接中使用的键上有索引吗?为了提高性能,通常需要这样的索引。
答案 1 :(得分:0)
我认为问题出在查询中。首先确保按姓名分组并尝试提供一些列名而不是* 。