我有旧的服务器和巨大的MySQL数据库的学生标记 所有学生只有一张公用表:
student_id | teacher_id |标记|评论
这个项目有6所学校,约有800名学生,每天我们有〜5000个分数
学生在性能方面存在问题 - 每次查询他们的分数大约需要两分钟才能得到结果 顺便说一句,我使用表索引
我有一个问题 - 如果我使用规范化并为每个这样的学生制作单独的表:
student_id | table
ivanov | ivanov_table
teacher_id | mark | comment
它会帮助我提高性能吗?
我没有购买新服务器的机会。
ADD:
当我使用mysql> SELECT * FROM all_students_table where student_id=001
时需要很长时间。我认为这是因为所有学生的信息都在一张巨大的桌子上。我想如果每个学生都会创建一个单独的表 - 这样的查询将花费更少的时间:mysql> SELECT * FROM student_001_table
。我是对的吗?
ADD:
这张桌子已经三年了
mysql> SELECT COUNT(*) FROM students_marks
给出结果2 453 389行并且每天都在增长
答案 0 :(得分:1)
由于像SELECT * FROM all_students_table where student_id=001
这样的简单查询花费的时间太长,唯一明智的结论是该表没有适当的索引。这样的查询需要 student_id
上的索引。当该索引存在时,查询应该对250万行执行几乎与对1,000行一样好(假设每个student_id
在表中频繁出现)
答案 1 :(得分:0)
首先,@ Arjan关于索引的内容。 其次,根据经验,你需要至少3个表,可能还需要5个表,其中包含非常精确的INDEX和PRIMARY KEYS
第三,这是违反直觉的,性能会下降,因为你必须搜索多个表并链接它们。规范化不是为了提高性能,而是为了进行健全性检查和验证以及消除重复信息。例如,您现在可以拥有教师/学生的实际名称,而不是隐藏的ID。
好消息是你的数据非常少(不管你怎么想),旧机器可以用适当的索引来处理它
希望这有帮助