4

我正在开发一个允许用户向 Web 表单动态添加问题的应用程序。我们使用 MySQL 作为后端,我正在努力寻找最快、最有效的方式来存储表单数据。

以前,我们将每个表单部分的数据存储在单独的表中。这些列是根据允许我们将动态问题映射到其存储位置的系统命名的。缺点是存储映射系统设计糟糕,这使得使用现有数据修改表单成为一场噩梦。此外,MySQL 对每行内存的限制限制了我们每个部分可以提出的问题数量。

因此,我正在考虑使用单个表来包含所有表单数据。因为允许论文问题,所以我正在考虑使用 Text 或 MediumText 作为实际数据的字段类型。但是,我担心运行查询时的 RAM 使用情况。当我对数据运行查询时,MySQL 是否足够聪明以仅分配字段中数据所需的内存(即使它是一个小整数),还是会分配 MediumText 字段允许的全部内存量?

此外,关于为这样的动态数据库存储数据,您能想到更好的方法吗?

艾米

4

2 回答 2

1

是的,当您创建用于存储这些大文本字段的表对象时,请尝试在表中使用压缩。如果您启用了 InnoDB 插件,这听起来很合适。

http://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-compression-tuning-when-data.html http://dev.mysql.com/doc/innodb-plugin/1.0/en /innodb-compression-usage.html

您的答案的简单表定义可能类似于:

CREATE TABLE test_answers (
answer_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
test_id INT UNSIGNED,
question_id INT UNSIGNED,
answer_body TEXT,
PRIMARY KEY(answer_id, question_id)
) ENGINE=InnoDB
 ROW_FORMAT=COMPRESSED 
 KEY_BLOCK_SIZE=4;
于 2010-09-30T20:21:18.270 回答
0

可能会摆脱中等大小的文本字段,但通常更好地将大字段存储在单独的表中。

于 2010-09-30T19:55:44.923 回答