MySQL文本字段和内存使用

MySQL文本字段和内存使用,mysql,optimization,memory,structure,ram,Mysql,Optimization,Memory,Structure,Ram,我正在开发一个应用程序,它允许用户向web表单动态添加问题。我们使用MySQL作为后端,我试图找到存储表单数据的最快、最有效的方法 以前,我们将每个表单部分的数据存储在单独的表中。这些列是根据允许我们将动态问题映射到其存储位置的系统命名的。缺点是存储映射系统设计不当,这使得使用现有数据修改表单成为一场噩梦。此外,MySQL对每行内存的限制也限制了我们在每节中可以提出的问题的数量 因此,我考虑使用一个表来包含所有表单数据。因为文章问题是允许的,所以我正在考虑使用Text或MediumText作为实

我正在开发一个应用程序,它允许用户向web表单动态添加问题。我们使用MySQL作为后端,我试图找到存储表单数据的最快、最有效的方法

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

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

此外,对于存储这样的动态数据库的数据,有没有更好的方法


Amy可能不需要中等大小的文本字段,但通常最好将大字段存储在单独的表中。

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

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;

我的印象是MyISAM比InnoDB快得多。InnoDB是否提供全文搜索功能?如果速度相当的话,我更愿意使用InnoDB,因为它也支持外键。与表引擎的区别是有取舍的。如果您能够正确地设计模式,您可以从InnoDB中获得出色的性能。当然,这取决于您的规模和I/O绑定方式。如果使用InnoDB,则必须设置单独的关键字索引,因为它没有全文索引。