MySQL性能优化 出题业务SQL优化

根据用户的作答结果出练习卷,题目的优先级为:未做过的题目只做错的题目做错又做对的题目只做对的题目。

先简单介绍一下项目背景。这是一个在线考试练习平台,数据库使用MySQL,表结构如图所示:

Question是存储题目的表,数据量在3万左右。AnswerResult表是存储用户作答结果的表,分表之后单表记录大概在300万-400万。

需求:根据用户的作答结果出练习卷,题目的优先级为:未做过的题目>只做错的题目>做错又做对的题目>只做对的题目。

在“做错又做对的题目”中,会按错误次数和正确次数的比例进行权重计算,比如:A、做错10次,做对100次;B、做错10次,做对20次。这时B被选中出给用户练习的概率就大。

备注:AnswerResult表中不存在QuestionId的记录,则代表该题没有做过。

之前使用的方法:

  SELECT Question.题目标识,IFNULL((0-正确次数)/(正确次数+错误次数),1) AS 权重 FROM Question

  LEFT JOIN AnswerResult ON AnswerResult.题目标识 = Question.题目标识

  WHERE 用户标识={UserId}

说明:IFNULL((0-正确次数)/(正确次数+错误次数),1)这个函数式分2部分,

公式:(0-正确次数)/(正确次数+错误次数)得到题目的权重,这个区间为[0,-1],0表示只做错的题目,-1表示只做对的题目。IFNULL(value,1)则将未做过的题目权重设置为1,根据这个权重进行排序列出题目。

由于AnswerResult表是多达300、400百万的表,所以通过LEFT JOIN进行左连接时,迪卡尔乘积过大,又加上AnswerResult是频繁读写的表,很容易导致这条SQL变成慢查询。

性能问题被提上日程后,这条SQL语句就变成的优化点。

1、IFNULL()这个函数计算可以调整成冗余字段。

2、LEFT JOIN的迪卡尔乘积太大,可以调整为冗余或者使用INNER JOIN以提高查询速度。

3、根据需求,其实可以调整出题策略,不同的情况执行不同的SQL,而不需要在同一条SQL中实现。

职优简历 职优简历

一款专注于互联网从业者的免费简历制作工具

职优简历 233 查看详情 职优简历

解决方案针对以上三个点进行调整。虽然Question表有3万条数据,但是出题的场景其实是针对知识点出题,单个知识点题目最多也只有1000题左右,所以获取未做过的题目时,完全可以使用NOT IN走索引来完成。SQL语句如:

  A:SELECT 题目标识 FROM Question WHERE 知识点={KnowledgePointCode} AND 题目标识 NOT IN (

    SELECT 题目标识 FROM AnswerResult INNER JOIN Question AND Question.知识点={KnowledgePointCode}

    WHERE AnswerResult.用户标识 = {UserId}

  )

针对只做错的题目出题练习就简单了(正确次数 = 0代表只做错),SQL如:

  B:SELECT 题目标识 FROM AnswerResult INNER JOIN Question AND Question.知识点={KnowledgePointCode}

  WHERE AnswerResult.用户标识 = {UserId} AND 正确次数 = 0 ORDER BY 错误次数 DESC

若要对做错、做对或者只做对的题目进行出题,SQL就是这样的(已经对权重进行冗余=IFNULL((0-正确次数)/(正确次数+错误次数),1)):

  C:SELECT 题目标识 FROM AnswerResult INNER JOIN Question AND Question.知识点={KnowledgePointCode}

  WHERE AnswerResult.用户标识 = {UserId} AND 正确次数 > 0 ORDER BY 权重 DESC

不足:SQL语句A的查询速度依然是较慢的,虽然有缩小NOT IN的结果集,但这里还是有优化点。园子里的朋友们能不能给点建议?

有人说JOIN是SQL的性能杀手,我觉得主要还是怎么去使用JOIN,MySQL的索引优化相当重要,如果JOIN成为性能瓶颈,可以EXPLAIN看看是不是索引没有建好,并且尽量让迪卡尔乘积尽量小。使用冗余数据避免JOIN,当可能变化的冗余数据被分表之后,更新这些冗余数据就是一件非常头痛的事了。海量数据高并发,确实是一件挺头痛的事。

望园子里有这方面经验的朋友不吝赐教。谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/447791.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
MIT团队运用机器学习闭环自主分子发现平台,成功发现、合成和描述了303种新分子
上一篇 2025年11月7日 21:38:25
这APP开发报价为什么差异那么大?
下一篇 2025年11月7日 21:38:36

相关推荐

  • WHERE条件中LIKE模糊匹配怎么做?%和_通配符的实战案例解析

    WHERE条件中LIKE模糊匹配怎么做?%和_通配符的实战案例解析WHERE条件中LIKE模糊匹配怎么做?%和_通配符的实战案例解析WHERE条件中LIKE模糊匹配怎么做?%和_通配符的实战案例解析WHERE条件中LIKE模糊匹配怎么做?%和_通配符的实战案例解析

    like模糊匹配通过%和_通配符实现,%匹配任意多个字符,_匹配一个字符。使用时需注意:1. 以具体字符开头的模式如’a%’能利用索引提升性能;2. 前导%如’%abc’会导致索引失效;3. 全文索引适用于频繁复杂模糊查询;4. 转义特殊字符时mysq…

    2026年10月1日 • 用户投稿
    100
  • 如何通过云服务器运行PHP后缀文件_远程部署PHP后缀文件的实用技巧

    首先安装LAMP或LNMP环境,以Ubuntu为例使用apt安装Apache和PHP;接着将PHP文件上传至/var/www/html目录,可通过SFTP、scp或直接编辑方式部署;然后启动Apache服务并设置开机自启,访问服务器IP确认Web服务正常;若.php文件仅显示源码,需检查PHP是否安…

    2026年10月1日
    100
  • MySQL到DB2: 如何解决常见的技术迁移挑战?

    MySQL到DB2: 如何解决常见的技术迁移挑战?MySQL到DB2: 如何解决常见的技术迁移挑战?MySQL到DB2: 如何解决常见的技术迁移挑战?MySQL到DB2: 如何解决常见的技术迁移挑战?

    MySQL到DB2: 如何解决常见的技术迁移挑战? 在软件开发过程中,技术迁移是一个经常面对的挑战之一。当我们需要将数据库从MySQL迁移到DB2时,可能会面临一些困难和复杂性。本文将介绍一些常见的技术迁移挑战,并给出解决方案,以帮助开发人员和数据库管理员顺利完成MySQL到DB2的迁移。 挑战1:…

    2026年10月1日 • 用户投稿
    300
  • 就业培训中PHP+MySQL框架的学习情况

    php和mysql在就业培训中学习情况积极,学员通过系统学习和实践可快速掌握并找到工作机会。1. 理解php基本语法和mysql查询语言是基础。2. 学习laravel或symfony等框架提高开发效率。3. 参与实际项目增强技术能力和简历亮点。4. 注重安全性,防范sql注入和xss攻击。5. 优…

    2026年10月1日
    000
  • MySQL vs. Oracle:从技术角度来看,谁更具竞争力?

    MySQL vs. Oracle:从技术角度来看,谁更具竞争力?MySQL vs. Oracle:从技术角度来看,谁更具竞争力?MySQL vs. Oracle:从技术角度来看,谁更具竞争力?MySQL vs. Oracle:从技术角度来看,谁更具竞争力?

    MySQL vs. Oracle:从技术角度来看,谁更具竞争力? 引言: 随着互联网的迅猛发展,大数据时代的到来,数据库管理系统(DBMS)的选择变得尤为重要。在众多DBMS中,MySQL和Oracle是两个备受关注的数据库管理系统。虽然两者都有着自己的优势和劣势,但是从技术角度来看,谁更具竞争力?…

    2026年10月1日 • 用户投稿
    000
  • 如何在学习大数据技术时选择合适的数据库引擎?MySQL还是Oracle?

    如何在学习大数据技术时选择合适的数据库引擎?MySQL还是Oracle?如何在学习大数据技术时选择合适的数据库引擎?MySQL还是Oracle?如何在学习大数据技术时选择合适的数据库引擎?MySQL还是Oracle?如何在学习大数据技术时选择合适的数据库引擎?MySQL还是Oracle?

    如何在学习大数据技术时选择合适的数据库引擎?MySQL还是Oracle? 在当今数据爆炸的时代,大数据技术已经成为了企业发展和决策的重要组成部分。而作为大数据技术的核心,数据库引擎的选择更是至关重要的。在众多数据库引擎中,MySQL和Oracle是两个备受关注和使用的数据库引擎。本文将就如何在学习大…

    2026年10月1日 • 用户投稿
    000
  • 如何利用MySQL设计规约提高技术同学的数据查询效率?

    如何利用MySQL设计规约提高技术同学的数据查询效率?如何利用MySQL设计规约提高技术同学的数据查询效率?如何利用MySQL设计规约提高技术同学的数据查询效率?如何利用MySQL设计规约提高技术同学的数据查询效率?

    如何利用MySQL设计规约提高技术同学的数据查询效率? 摘要:在大数据时代,高效、准确的数据查询是技术人员必备的技能之一。MySQL是广泛使用的关系型数据库管理系统,在数据查询过程中,如何利用MySQL的设计规约来提高技术同学的数据查询效率是非常重要的。本文将介绍如何利用MySQL的设计规约,通过代…

    2026年10月1日 • 用户投稿
    000
  • MySQL MVCC 原理深入解读及最佳实践

    MySQL MVCC 原理深入解读及最佳实践MySQL MVCC 原理深入解读及最佳实践MySQL MVCC 原理深入解读及最佳实践MySQL MVCC 原理深入解读及最佳实践

    MySQL MVCC 原理深入解读及最佳实践 一、概述MySQL 是使用最广泛的关系型数据库管理系统之一,其支持多版本并发控制(Multi-Version Concurrency Control,MVCC)机制来处理并发访问问题。本文将深入解读 MySQL MVCC 的原理,并给出一些最佳实践的例子…

    2026年10月1日 • 用户投稿
    000
  • MySQL中的主从复制和高可用架构

    MySQL中的主从复制和高可用架构MySQL中的主从复制和高可用架构MySQL中的主从复制和高可用架构MySQL中的主从复制和高可用架构

    MySQL中的主从复制和高可用架构 随着互联网应用和数据量的不断增长,数据库的高可用性和可扩展性变得越来越重要。MySQL作为一种使用广泛的开源关系型数据库,提供了主从复制和高可用架构的解决方案。 主从复制是指将一个MySQL数据库实例作为主库(master),并将其数据复制到一个或多个从库(sla…

    2026年10月1日 • 用户投稿
    200
  • MySQL怎样导出数据到文件 CSV/Excel格式导出全攻略

    MySQL怎样导出数据到文件 CSV/Excel格式导出全攻略MySQL怎样导出数据到文件 CSV/Excel格式导出全攻略MySQL怎样导出数据到文件 CSV/Excel格式导出全攻略MySQL怎样导出数据到文件 CSV/Excel格式导出全攻略

    mysql导出数据到文件的方法主要包括命令行方式、select…into outfile语句、mysqldump命令、图形化工具及编程语言连接数据库。1. 命令行方式通过mysql命令执行查询并将结果输出至文件,可结合sed替换分隔符;2. select…into outfi…

    2026年10月1日 • 用户投稿
    100
  • 如何使用 OpenSSL 生成 MySQL SSL 证书

    如何使用 OpenSSL 生成 MySQL SSL 证书如何使用 OpenSSL 生成 MySQL SSL 证书如何使用 OpenSSL 生成 MySQL SSL 证书如何使用 OpenSSL 生成 MySQL SSL 证书

    如何使用 OpenSSL 生成 MySQL SSL 证书 简介:MySQL 是一种广泛应用的关系型数据库系统,在实际生产环境中使用 SSL(Secure Sockets Layer)协议进行加密通信是非常重要的。本文将介绍如何使用 OpenSSL 工具生成 MySQL SSL 证书,并提供相应的代码…

    2026年10月1日 • 用户投稿
    200
  • 数据库管理者的抉择:SQL Server还是MySQL?

    数据库管理者的抉择:SQL Server还是MySQL?数据库管理者的抉择:SQL Server还是MySQL?数据库管理者的抉择:SQL Server还是MySQL?数据库管理者的抉择:SQL Server还是MySQL?

    数据库管理者的抉择:SQL Server还是MySQL? 在当今技术发展迅猛的时代,作为数据库管理者,选择合适的数据库管理系统成为了一个极其重要的决策。其中,SQL Server和MySQL作为常用的关系型数据库管理系统,备受关注。本文将从以下几个方面对比SQL Server和MySQL,并给出代码…

    2026年10月1日 • 用户投稿
    100
  • 学习大数据技术前,了解MySQL和Oracle的特点与应用场景。

    学习大数据技术前,了解MySQL和Oracle的特点与应用场景。学习大数据技术前,了解MySQL和Oracle的特点与应用场景。学习大数据技术前,了解MySQL和Oracle的特点与应用场景。学习大数据技术前,了解MySQL和Oracle的特点与应用场景。

    学习大数据技术前,了解MySQL和Oracle的特点与应用场景 引言随着大数据时代的到来,大数据技术逐渐成为各行业关注的重点。而在大数据技术生态系统中,数据库扮演着非常重要的角色。在数据库中,MySQL和Oracle作为两个非常知名的关系型数据库,具有广泛的应用场景和特点。本文将分别介绍MySQL和…

    2026年10月1日 • 用户投稿
    100
  • MySQL MVCC 原理分析与实战:提升数据库性能的关键策略

    MySQL MVCC 原理分析与实战:提升数据库性能的关键策略MySQL MVCC 原理分析与实战:提升数据库性能的关键策略MySQL MVCC 原理分析与实战:提升数据库性能的关键策略MySQL MVCC 原理分析与实战:提升数据库性能的关键策略

    MySQL是一种功能强大的关系型数据库管理系统,广泛应用于各种应用程序的开发中。为了提高数据库的性能,MySQL引入了MVCC(多版本并发控制)机制。本文将分析MVCC的原理,并提供一些实战策略,帮助读者优化MySQL数据库性能。 MVCC是MySQL用于控制同时读写的并发事务的一种机制。它通过在每…

    2026年10月1日 • 用户投稿
    100
  • 从知识图谱到精准决策:基于MCP的招投标货物比对溯源系统实践

    从知识图谱到精准决策:基于MCP的招投标货物比对溯源系统实践从知识图谱到精准决策:基于MCP的招投标货物比对溯源系统实践从知识图谱到精准决策:基于MCP的招投标货物比对溯源系统实践从知识图谱到精准决策:基于MCP的招投标货物比对溯源系统实践

    前言 从最初对人工智能的懵懂认知,到逐渐踏入prompt工程的世界,我们一路探索,从私有化部署的实际场景,到对deepseek技术的全面解读,再逐步深入到nl2sql、知识图谱构建、rag知识库设计,以及chatbi这些高阶应用。一路走来,我们在ai的领域里一步一个脚印,不断拓展视野和能力边界。如果…

    2026年10月1日 • 用户投稿
    200
  • MySQL MVCC 原理剖析与性能优化策略

    MySQL MVCC 原理剖析与性能优化策略MySQL MVCC 原理剖析与性能优化策略MySQL MVCC 原理剖析与性能优化策略MySQL MVCC 原理剖析与性能优化策略

    MySQL 是一种常用的关系型数据库管理系统,被广泛应用于各种应用中。在 MySQL 中,MVCC(Multi-Version Concurrency Control)是一种用于实现并发控制和事务隔离的机制。本文将剖析 MySQL MVCC 的原理,并提供一些性能优化策略,以提高数据库的性能。 MV…

    2026年10月1日 • 用户投稿
    300
  • 深入理解MySQL MVCC 原理,提高查询效率

    深入理解MySQL MVCC 原理,提高查询效率深入理解MySQL MVCC 原理,提高查询效率深入理解MySQL MVCC 原理,提高查询效率深入理解MySQL MVCC 原理,提高查询效率

    深入理解MySQL MVCC 原理,提高查询效率 在数据库中,有效地处理并发事务一直是一个重要的挑战。MySQL 中的多版本并发控制(Multi-Version Concurrency Control,MVCC)是一种处理并发事务的机制,它能够提高查询效率并降低数据冲突的可能性。本文将深入探讨MyS…

    2026年10月1日 • 用户投稿
    100
  • mysql中all的用法 mysql all比较运算符解析

    在mysql中,all关键字用于将一个值与子查询返回的所有值进行比较。1) all适用于复杂业务逻辑,如找出工资高于销售部门所有员工的员工。2) 使用时需注意性能和逻辑,确保子查询数据集小且适当使用索引。 在MySQL中,ALL关键字是一个强大且常用的比较运算符,通常与子查询结合使用。让我们深入探讨…

    2026年10月1日
    300
  • 如何在Sublime运行PHP代码|本地服务器配置图文详解

    如何在Sublime运行PHP代码|本地服务器配置图文详解如何在Sublime运行PHP代码|本地服务器配置图文详解如何在Sublime运行PHP代码|本地服务器配置图文详解如何在Sublime运行PHP代码|本地服务器配置图文详解

    在 sublime text 中无法直接运行 php 代码,需配置本地服务器环境。安装 xampp 或 wamp(xampp 跨平台,wamp 仅限 windows)后启动 apache 和 mysql 服务,并将 php 文件置于 htdocs 目录下即可运行。可通过方法一手动复制文件至 htdo…

    2026年10月1日 • 用户投稿
    100
  • 如何实现MySQL中的事务处理?

    如何实现MySQL中的事务处理?如何实现MySQL中的事务处理?如何实现MySQL中的事务处理?如何实现MySQL中的事务处理?

    如何实现MySQL中的事务处理? 事务是数据库中重要的概念之一,能够保证数据的一致性和完整性,确保在并发操作中数据的正确性。MySQL作为一种常用的关系型数据库,也提供了事务处理的机制。 一、事务的特点 事务具有以下四个特点,通常用ACID来概括:原子性(Atomicity)、一致性(Consist…

    2026年10月1日 • 用户投稿
    200

发表回复

登录后才能评论
关注微信