Mysql 速度和性能优化问题:多数据库模型与单个数据库

Mysql 速度和性能优化问题:多数据库模型与单个数据库,mysql,database,performance,indexing,summary,Mysql,Database,Performance,Indexing,Summary,我有一个基本上是学校考试系统的申请。学生参加考试。教师跟踪测试。目前,我们只有一个数据库(mysql)来存储所有信息。随着用户的增长,性能非常缓慢。现在的决定是,是为每所学校设立一个数据库,还是以某种方式优化我们现有的单个数据库。我们的问题是,对于单个db和多达1000所学校,性能优化是否可能/建议。让我们了解一下正在处理的数据:目前约有1000所学校注册,但只有40-50所学校积极使用该系统。这样一来,student表中的行数就超过了8000行,但包含student_答案(记录测验答案)的表已

我有一个基本上是学校考试系统的申请。学生参加考试。教师跟踪测试。目前,我们只有一个数据库(mysql)来存储所有信息。随着用户的增长,性能非常缓慢。现在的决定是,是为每所学校设立一个数据库,还是以某种方式优化我们现有的单个数据库。我们的问题是,对于单个db和多达1000所学校,性能优化是否可能/建议。让我们了解一下正在处理的数据:目前约有1000所学校注册,但只有40-50所学校积极使用该系统。这样一来,student表中的行数就超过了8000行,但包含student_答案(记录测验答案)的表已经超过了70k,这就是问题所在。类似地,我们有一个测验参与者表(记录每个用户进行的每个测验),它也超过70000行

我们将重视对以下方面的任何评论

  • 考虑到上述预期数字,每所学校设立一个db是更好的,还是一个db可以有效地工作,假设2000所活跃的学校(乘以我们拥有的40所学校的数字,以匹配2000年的数据)

  • 如果上述问题的答案是很容易实现单个数据库和优化,那么在创建汇总表、编制索引等方面的任何建议都将不胜感激

  • a) 学生的汇总表,学生的答案是什么样的

    在这两个表中可以找到大部分数据 1.参加测验者 2.学生答覆

    当前表结构(数据字典)可在以下链接中找到:

    注意已经应用了索引(这是我们已经尝试过的),但是性能仍然不是最优的


    我们的主要问题是,针对这种使用水平(2000所活跃学校)的单一db设计是否可行,是否可以充分优化

    一对多数据库

    术语“数据库”可能意味着“服务器”,也可能指创建数据库。在后一种情况下:

    SELECT ... FROM dbname.tblname ...
    
    速度和

    USE dbname;
    ...
    SELECT ... FROM tblname ...
    
    因此,表是在同一个数据库中还是在不同的数据库中并不重要

    如果您指的是不同的服务器(计算机),那么这是一个很大的区别

    另一种方法是将所有学校放入一个,并为
    学校id
    增加一列。这通常是最好的。但是,我觉得这将是更多的工作比预期的,我会假设你有

    • 一个MySQL实例(在一台服务器上)
    • 许多
      数据库
      ,每个“学校”一个
    • 每个
      数据库
      都有多个表格,用于获取有关该学校的信息
    底线要解决性能问题,我们需要查看查询和
    显示创建表
    。它可以简单到缺少一些索引

    适当地索引,即使是一个70K行的表,也是一个“小”表

    汇总表?对于十亿行的表格,我强烈鼓励使用汇总表。对于70K行,它可能很有用。你想总结一下吗?你要总结的表格是什么


    模式好的,您有该模式的图片。这很难处理。而
    description
    的描述性不如
    SHOW CREATE TABLE
    。我看不到很多次键?难怪您会遇到性能问题。向我们显示一个
    选择
    连接两个或多个表并具有
    位置的
    ;我们将讨论需要哪些其他索引。

    “注意已经应用的索引(这是我们已经尝试过的),但性能仍然不是最佳的。”MySQL是否也使用了一个问题所在的索引->
    解释查询
    ,并将结果和查询发布在此处。。MySQL应该能够在一个表中处理数百万甚至数十亿条记录,只要建立索引,MySQL就可以使用索引。此外,对于问题/查询中涉及的每个表,显示CREATE table table
    ,并将结果发布到这里。Raymond-恐怕你说的都不清楚。我知道mysql可以处理……但这不是我的问题。另外-不明白您所说的解释查询/显示创建…:)是什么意思生成一个查询计划,以便我们可以查看MySQL是否确实在使用索引进行查询。。并生成一个
    CREATE TABLE
    结构,以便我们可以自己查看并使用该表来测试一些东西。。此外,我们还需要知道您执行了哪些查询“恐怕您所说的一切都不清楚”。更简单的是,这是一个性能问题,我无法解释,因为这是一个性能问题,我们需要这些信息,否则这个问题对我们来说完全不清楚。谢谢-将尽我所能(记住我是创始人/所有者,而不是开发人员)你能解释一下SHOW CREATE TABLES…或者一段youtube视频/文章演示如何做以改进我的问题吗?你的想法对一开始很有帮助