繁体   English   中英

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

[英]Speed and performance optimisation problem: Multiple database model vs single database

我有一个实质上是学校的考试系统的应用程序。 学生参加考试。 老师跟踪测试。 当前,我们只有一个数据库(mysql)来存储所有信息。 随着用户的增长,性能非常慢。 现在的决定是是否要为每个学校分配一个数据库,还是以某种方式优化我们现有的单个数据库。 我们的问题是关于是否甚至可以/建议使用单个数据库和多达1000个学校的性能优化。 让我们对正在处理的数据有所了解:目前大约有1000所学校签约,但只有40到50所学校积极使用该系统。 这样,student表中的行超过了8000,但这是具有student_answers(测验记录答案)的表已经超过70k,这就是问题所在。 同样,我们有一个测验者表(记录每个用户进行的每个测验),该表也超过了70,000行。

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

  1. 鉴于上述预期的数字,最好是每所学校分配一个数据库,或者假设2000个活动学校 (如果将40所学校的数字与2000年的数字相乘,则一个数据库可以有效地工作) )

  2. 如果上面的答案是单个数据库和优化很容易实现,那么在创建汇总表,建立索引等方面的任何建议将不胜感激,特别是

a)学生的摘要表,student_answer是什么样的?

在这两个表中可以找到大部分数据。1. quiz_takers 2. student_answers

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

https://drive.google.com/file/d/13WxRgmOxkRWcYV238tZJzgFSDV7fWK0J/view?usp=sharing

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

我们的主要和主要问题是,针对这种使用水平的单个数据库设计(2000个活跃的学校)是否可行并且可以进行充分优化。

一对多数据库

术语“数据库”可以表示“服务器”或可以指代CREATE DATABASE 在后一种情况下:

SELECT ... FROM dbname.tblname ...

就像

USE dbname;
...
SELECT ... FROM tblname ...

因此,表是在同一数据库中还是在不同数据库中都没有关系。

如果您指的是不同的服务器 (计算机),则这是一个很大的差异。

另一种方法是将所有学校放在一个表中 ,并为school_id添加一个额外的列。 这通常是最好的。 但是,我认为那将是超出预期的工作,我会假设您有

  • 一个MySQL实例(在一台服务器上)
  • 许多DATABASEs ,每个“学校”一个
  • 每个DATABASE都有几个表,以提供有关该学校的信息。

底线为了解决性能问题,我们需要查看查询和SHOW CREATE TABLE 就像丢失一些索引一样简单。

适当索引的表,即使是7万行的表,都是“小”表。

汇总表? 对于十亿行表,我强烈建议您使用汇总表。 对于70K行,这可能会很有用。 您想总结一下吗? 您要总结的表是什么?

模式确定,您已经有了模式的图片。 那很难处理。 并且DESCRIBE的描述性不如SHOW CREATE TABLE 我看不到许多辅助键吗? 难怪您遇到性能问题。 向我们展示一个SELECT ,它JOINs两个或多个表并具有WHERE 我们将讨论还需要哪些其他索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM