我正在开发一个应用程序,允许用户动态地向Web表单添加问题。我们使用MySQL作为后端,我正在尝试找到存储表单数据的最快,最有效的方法。
以前,我们将数据存储在每个表单部分的单独表中。这些列是根据允许我们将动态问题映射到其存储位置的系统命名的。缺点是存储映射系统设计糟糕,这使得使用现有数据修改表单成为一场噩梦。此外,MySQL对每行内存的限制限制了我们每个部分可能有的问题数量。
因此,我正在考虑使用单个表来包含所有表单数据。由于允许使用论文问题,我正在考虑使用Text或MediumText作为实际数据的字段类型。但是,我担心运行查询时的RAM使用情况。当我运行数据查询时,MySQL是否足够聪明,只能分配字段中数据所需的内存(即使它是一个小整数),还是会分配MediumText字段允许的全部数量?
此外,对于像这样的动态数据库存储数据,有没有更好的方法可以考虑?
艾米
答案 0 :(得分: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;
答案 1 :(得分:0)
可能会使用中等大小的文本字段,但通常可以更好地将大字段存储在单独的表中。