我正在设计一个测验应用程序,我被困在如何设计答案表。数据库设计在测验应用程序中的答案表
假设我有以下表格:
User(user_id,...other columns)
Question(question_id,user_id,...other columns)
QuestionAnswers(question_id,answer_id... other columns)
现在该怎么办了UserAnswers表?我想到的结构是这样的:
UserAnswers(user_id,question_id,answer_id,.. other columns)
我做的结构在开始时效果很好,但是一旦我达到1000万行后性能开始下降。考虑到我的应用程序,如果有10,000个问题存在,并且系统中有1000个用户,并且每个用户都回答每个问题。我将很容易达到1000万行,随着用户和问题的增加,表格大小将大幅增长。
什么是更好的方法来存储这些答案?
此外,我设计了MySQL系统。你认为同样的表结构在其他一些DBMS中会更好吗?
mysql> explain select count(*) from user_answer where question_id = 9845;
+----+-------------+-------------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
| 1 | SIMPLE | user_answer | NULL | ref | question_id | question_id | 4 | const | 645 | 100.00 | Using index |
+----+-------------+-------------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
mysql> explain select count(*) from user_answer;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------------------+
| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Select tables optimized away |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> select count(*) from user_answer;
+----------+
| count(*) |
+----------+
| 20042126 |
+----------+
1 row in set (11 min 30.33 sec)
虽然这个问题可能不适合StackOverflow,但我很想知道答案,因为这是一个相当实际的问题 – Ben
@Ben我知道它应该移到http://dba.stackexchange.com/,但是我想要更多的观众。 –
@EricB。在生产中,1000万不是一个非常大的值,我们在单个mysql表中有250条记录,但其性能很好。你必须根据查询索引你的表格 –