【发布时间】:2018-02-28 16:29:00
【问题描述】:
我有旧的服务器和庞大的学生成绩 MySQL 数据库 所有学生只有一张公用表:
student_id |教师编号 |标记 |评论
这个项目有六所学校和大约 800 名学生,每天我们有大约 5000 分
学生的成绩有问题 - 每次查询他们的分数大约需要两分钟才能得到结果 顺便说一句,我使用表索引
我有一个问题 - 如果我使用规范化并像这样为每个学生制作单独的表格:
STUDENTS_TABLE
student_id | table
ivanov | ivanov_table
IVANOV_TABLE
teacher_id | mark | comment
它会帮助我提高性能吗?
我没有机会购买新服务器。
添加:
当我使用mysql> SELECT * FROM all_students_table where student_id=001 时,它需要很长时间。我认为这是因为所有学生的信息都在一张巨大的桌子上。而且我想如果将为每个学生创建单独的表 - 像这样的查询将花费更少的时间:mysql> SELECT * FROM student_001_table。我说的对吗?
添加:
这张桌子已经用了三年了
mysql> SELECT COUNT(*) FROM students_marks
给出结果 2 453 389 行,它每天都在增长
【问题讨论】:
-
您需要将范围缩小到特定查询和更具体的问题描述。
-
我同意 @tadman 的观点,只是提一下,尽管 den-normalized 数据更适合报告应用程序
-
为每个学生制作一个单独的表格并不是规范化的。根据您向我们展示的内容,日期字段可能会有所帮助,因此您可以对其进行过滤。
-
显示您的表 DDL (
CREATE TABLE...) 和运行EXPLAIN SELECT * FROM all_students_table where student_id=001的结果。然后SET profiling = 1,再次运行SELECT...查询,并发布SHOW profile的结果。 -
另外,不要为每个学生创建一个表!
标签: mysql sql database performance normalization