MySQL 文本字段和内存使用

标签 mysql optimization memory structure ram

我正在开发一个应用程序,该应用程序允许用户向 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/

相关文章:

java - == 抽象数据类型,相同条件下的不同结果

php - 我如何使用 php 处理大的 mysql 表进行登录验证

php - 我想从 .txt 和数据库中找到相同的行,然后根据文本文件中的新行更新数据库

java - 配置 Maven 使用 javac -O

mysql - 让我的 SQL 查询更有效率

c 程序 - 为什么整数占用 4 个字节,却以 8h 为间隔存储

php - 如何使用此php代码从wamp数据库访问mysql表?

python - 使用Python将特定列数据从CSV导入到不同的MYSQL表中

c - 快速随机访问链表节点

Java BigDecimal 内存使用情况?