【问题标题】:MySQL: Storage of multiple text fields for a recordMySQL:为记录存储多个文本字段
【发布时间】:2010-03-29 17:00:39
【问题描述】:

一个没有经验的问题:

我需要将每条记录大约 10 个未知长度的文本字段存储到 MySQL 表中。我预计此表的总行数不超过 50K,但速度很重要。出于所有实际目的,数据库操作将仅是 SELECT(并且搜索将仅使用整数 PK id 完成)。我正在使用 InnoDB。

换句话说:

标识 |文本1 |文本2 |文本3 | .... |文本10

据我了解,MySQL 会将文本存储在其他地方并在表本身上使用自己的指标,我想知道考虑到数据的存储方式,我是否应该担心任何基本的性能影响? (即表中的几个“子提取”)。

谢谢。

【问题讨论】:

    标签: mysql performance select text


    【解决方案1】:

    基本上您要问的是,这 10 个 TEXT 字段是否需要为您检索的每一行进行 10 次单独的磁盘查找。我不确定 InnoDB 是否会连续编写所有这些并能够快速读取它们,因此,对于大多数性能问题,您最好的选择是创建并运行一些简单的测试并找出含义是什么(除非其他人出现并声称知道!)

    有几点需要注意:

    • 由于您的表不是那么大并且您主要使用 SELECT,因此您可以只缓存数据。 InnoDB 可以将实际数据存储在其缓冲池中(与 MyISAM 不同) - 因此请尝试将此值 (innodb_buffer_pool_size) 设置为足够大以容纳您的数据。
    • 如果您总是阅读所有 10 列,并且想要使用单个 TEXT 字段,则可以添加一些中间代码,通过在每个字段前面加上其所具有的字符/字节数来处理将数据拆分为 10 个部分,这样当您回读数据时,您就可以确切地知道每个部分占用了多少空间。
    • 如果您采用上述方法,您可能需要使用更大的 TEXT 字段,例如 MEDIUMTEXT 或 LONGTEXT。

    【讨论】:

      【解决方案2】:

      您打算按id(索引键)还是按文本字段中的数据选择记录?

      如果是前者,性能应该不是问题。如果是后者,请确保索引您将用于加载的任何字段。

      【讨论】:

      • SELECT 将始终且仅基于整数 ID,而不是文本。
      猜你喜欢
      • 2014-08-06
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多