MySQL性能优化问题的优化
问题是一个列表的存储问题,随着数据量的约3万,answerresult表是一个表来存储用户回答的结果,和单表的记录是300万分表后4亿。
需求:根据用户答案的结果,给出运动量。题目的重点是:以前没有做过的科目:只做错误的科目,做错误的科目,做正确的科目,只做正确的问题。
在做错误和做正确的问题时,权重将根据错误的数量和正确的时间来计算。比如,A,做10次错,做100次,B,做10次错,做20次。此时,B被选中给用户练习的概率是很大的。
注:在answerresult表没有QuestionId的记录,这是没有问题的代表作。
以前使用的方法:
选择的问题。ifnull(标题标识(0正确数)/(错误的正确数+数),1)从问题的重量
左上answerresult加入answerresult。标题身份=问题。标题识别
在用户身份= {用户名}
描述:IFNULL((0正确数)/(时间+错误次数正确的号码),1)此功能分为2个部分,
公式:(0 -正确次数)/(正确的时间+错误次数)得到的重量问题,这个区间是{ 0,1 },0代表只有做错的题目,1只做正确的questions.ifnull(价值1)套不做1题的重量,并列出标题根据这个重量。
因为answerresult表达300和4亿,所以当左连接的左连接,decarr产品太大,加上answerresult是频繁的读写桌,易引起此SQL成为慢查询。
在性能问题被提上日程后,SQL语句成为优化点。
1、ifnull()可以调整冗余字段。
2、左连接的decarr产品过大应调整冗余或使用内部联接来提高查询速度。
三.根据需求,您实际上可以调整问题策略,在不同的情况下执行不同的SQL,并且不需要在同一SQL中实现。
解决的办法是调整为三分以上。虽然问题表有3万个数据,但出来的场景实际上是知识指出,个体知识学科最多只有1000项,这样做没问题,我们可以用不在已完成ropewalking.sql报表等:
答:选择标题识别问题,从知识点= { knowledgepointcode }和标题识别不在(不在)。
选择标题识别从answerresult内连接问题和问题。知识点= { KnowledgePointCode }
在answerresult。用户身份= {用户名}
)
这个练习对于一个错误的主题是很简单的(正确的数字= 0是错误的),SQL等:
B:选择标题识别从answerresult内连接问题和问题。知识点= { KnowledgePointCode }
在answerresult。用户ID = {用户名}和正确数= 0阶的错误次数降序
如果我们想问一个关于犯错误、做正确的事情或做正确的问题的问题,那么SQL就是这样的。(有多余的= ifnull((0 -正确的时间)/(正确的时间+错误次数),1)。
C:选择标题识别从answerresult内连接问题和问题。知识点= { KnowledgePointCode }
在answerresult。用户ID = {用户名}和正确数> 0按重量降序
不足:SQL语句A的查询速度仍然很慢,虽然不在结果集中有所减少,但这里仍然有一个优化点。
有人说连接是SQL的杀手。我认为最主要的是如何使用连接。MySQL索引优化非常重要。如果加入成为性能瓶颈,解释可以看到如果指数不建,并努力使decarr产品尽可能的小,以避免冗余数据的加入,这是一个非常头痛的更新冗余数据时,可能会改变冗余数据是分开的。大量的数据是很高的,它的真的很头疼。
希望在花园里有这方面的经验,谢谢您的批评,谢谢。