我工作的一个应用程序,允许用户动态地添加问题,以网页形式。我们使用了MySQL作为后台,我试图找到存储表单数据的最快,最有效的方式。

此前,我们存储在为每个表单部分一个单独的表中的数据。列是根据,使我们能够映射到其存储位置的动态问题的系统命名。的缺点是,所述存储映射系统被设计不良,这使得修改与现有的数据形式的梦魇。此外,在每行内存MySQL的局限性的限制我们可以有每部分的问题数量。

因此,我期待在使用单个表以包含所有形式的数据。由于论述题是允许的,我使用的文本或MEDIUMTEXT作为字段类型的实际数据的考虑。但是,我在运行查询时关注RAM使用。当我运行一个用于数据的查询,将MySQL的是足够聪明的分配只需要在该领域的数据(即使是一个小的整数)或将其分配允许的MEDIUMTEXT场?

此外,是否有你能想到的有关于存储数据像这样的动态数据库更好的办法?

艾米

有帮助吗?

解决方案

是的,当你创建用于存储这些大的文本字段的表对象,尝试在你的表使用压缩。这听起来像一个完美的结合,如果你启用了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;

其他提示

可能会逃脱中等规模的文本字段,但通常更好大字段存储在一个单独的表。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top