【问题标题】:Speed and performance optimisation problem: Multiple database model vs single database速度和性能优化问题:多数据库模型 vs 单数据库
【发布时间】:2019-08-09 14:09:03
【问题描述】:

我有一个应用程序,它本质上是一个学校的考试系统。学生参加考试。教师跟踪测试。目前,我们有一个单独的数据库(mysql)来存储所有信息。随着用户的增长,性能非常缓慢。现在的决定是是否为每所学校使用一个数据库,或者以某种方式优化我们现有的单个数据库。我们的问题是,是否甚至可以/推荐使用单个数据库和多达 1000 所学校进行性能优化。了解正在处理的数据:目前大约有 1000 所学校注册,但只有 40-50 所学校积极使用该系统。这样一来,student 表中的行数就超过了 8000,但是这个表的 student_answers(记录测验的答案)已经超过了 70k,问题就在这里。同样,我们有一个 quiz-takers 表(它记录了每个用户进行的每个测验),它也超过 70,000 行。

我们会重视以下方面的任何 cmets

  1. 考虑到上述预期数字,每所学校选择一个数据库会更好吗,或者单个数据库是否可以有效地工作,假设有 2000 所 ACTIVE 学校(乘以我们拥有的 40 所学校的数据与 2000 年的数据相当)

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

a) 学生汇总表 student_answers 是什么样的?

大部分数据都在这两个表中 1. quiz_takers 2. student_answers

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

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

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

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

【问题讨论】:

  • "注意已经应用的索引(这是我们已经尝试过的)但性能仍然不是最佳的。" MySQL 是否也使用索引这就是问题 -> @ 987654324@ 并在此处发布结果和查询.. MySQL 应该能够在单个表中处理数百万甚至数十亿条记录,当索引和 MySQL 使用索引时。
  • 也代替文档 -> SHOW CREATE TABLE table 用于问题/查询中涉及的每个表并在此处发布结果..
  • Raymond - 恐怕你说的都不清楚。我知道 mysql 可以处理它......但这不是我的问题。另外 - 不明白解释查询/显示创建的意思... :)
  • explain query 生成一个查询计划,以便我们查看 MySQL 是否确实在使用索引进行查询。SHOW CREATE TABLE table 生成一个 CREATE TABLE 结构,因此我们可以自己查看和使用该表测试一些东西。我们还需要知道你执行了哪些查询“恐怕你所说的没有什么是清楚的。” 比这更简单,我无法解释,因为这是一种性能问题我们需要这些信息,否则这个问题对我们来说完全不清楚..
  • 谢谢 - 将尽我所能修改(请记住,我是创始人/所有者而不是开发人员)所以在技术上解决问题的方式较少。

标签: mysql database performance indexing summary


【解决方案1】:

一对多数据库

术语“数据库”可能表示“服务器”或可能指创建数据库。在后一种情况下:

SELECT ... FROM dbname.tblname ...

速度一样快

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

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

如果您指的是不同的服务器(计算机),那么差别很大。

另一种方法是将所有学校放在一个单个表中,并为school_id 增加一列。这通常是最好的。但是,我觉得这比预期的要多,我会假设你有

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

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

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

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

架构 好的,您有架构的图片。这很难处理。而且DESCRIBE 的描述性不如SHOW CREATE TABLE。我没有看到很多辅助键?难怪您遇到性能问题。向我们展示一个SELECTJOINs 两个或更多表并且有一个WHERE;我们将讨论还需要哪些其他索引。

【讨论】:

  • 您能否解释一下 SHOW CREATE TABLES ...或演示如何执行此操作以改善我的问题的 youtube 视频/文章...您的想法对开始很有帮助
猜你喜欢
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 2022-01-03
相关资源
最近更新 更多