【发布时间】:2012-08-20 06:13:26
【问题描述】:
我们有一个在线评委(类似于SPOJ.pl),我们会在周末进行这些长达 3 小时的比赛,在比赛结束时,我们收到了将近 1000 份参赛作品。我们将所有这些运行存储在一个表上(包括提交的代码)。目前的表结构如下:
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| rid | int(11) | NO | PRI | NULL | auto_increment |
| pid | int(11) | YES | | NULL | |
| tid | int(11) | YES | | NULL | |
| language | tinytext | YES | | NULL | |
| name | tinytext | YES | | NULL | |
| code | longtext | YES | | NULL | |
| time | tinytext | YES | | NULL | |
| result | tinytext | YES | | NULL | |
| error | text | YES | | NULL | |
| access | tinytext | YES | | NULL | |
| submittime | int(11) | YES | | NULL | |
| output | longtext | YES | | NULL | |
+------------+----------+------+-----+---------+----------------+
现在的问题是,每次我们在其中查询时使用ORDER BY 子句,最终都会对整个表进行排序。如果超过 1000 行,每行都包含大量数据,则所花费的时间很重要。请注意,这是在OPTIMIZE-ing 表格定期表示对提交内容进行了更改之后。我们确实有两个选择:
- 大约 100 个条目后拆分表格。
- 将大量数据(提交的代码)存储为文件,而不是将它们作为值插入表中以减少开销。
如果我们实际上可以保持表结构原样,是否还有另一种替代/解决方法?我真的可以在这里使用一些帮助。谢谢。
【问题讨论】:
-
@ManMohanVyas,建议不仅要更改 RDBMS,还要更改 DBMS,因为 OP 在他们的表中有一些记录,在我看来,这是一个巨大的过度反应。 1000 行是一张非常小的表格,无论它们有多宽。
-
你的查询是什么,你的表结构,解释计划和索引? RDBMS 旨在处理您所说的很多很多倍的数据量。
-
@Ben : 我已经添加了表格的结构。
标签: mysql