我正在开发一个应用程序,该应用程序允许用户向 Web 表单动态添加问题。我们使用 MySQL 作为后端,我正在努力寻找最快、最有效的存储表单数据的方式。
以前,我们将数据存储在每个表单部分的单独表中。这些列是根据允许我们将动态问题映射到其存储位置的系统命名的。缺点是存储映射系统设计糟糕,这使得使用现有数据修改表单成为一场噩梦。此外,MySQL 对每行内存的限制限制了我们每节的问题数量。
因此,我正在考虑使用一个表来包含所有表单数据。因为允许问答题,所以我正在考虑使用 Text 或 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;
关于MySQL 文本字段和内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3834266/