MySQL:使用 LONGTEXT 而不是 MEDIUMTEXT 是不是缺乏性能?

Posted

技术标签:

【中文标题】MySQL:使用 LONGTEXT 而不是 MEDIUMTEXT 是不是缺乏性能?【英文标题】:MySQL: Is there a lack of performance by using LONGTEXT instead of MEDIUMTEXT?MySQL:使用 LONGTEXT 而不是 MEDIUMTEXT 是否缺乏性能? 【发布时间】:2020-02-02 04:08:08 【问题描述】:

我知道尽可能使用最小数据类型的原则,但我想知道为什么这会适用于 mysql 中的 TEXT / MEDIUMTEXT / LONGTEXT?如果我使用 LONGTEXT 而不是 MEDIUMTEXT,是否存在性能问题? 我找到了问题What is the disadvantage to using a MySQL longtext sized field when every entry will fit within a mediumtext sized field? ,但我认为这不是性能问题的答案?

LONGTEXT 只是多一点存储空间的问题吗?

什么时候我应该更喜欢 MEDIUMTEXT 而不是 LONGTEXT?

【问题讨论】:

您应该使用您真正需要的数据类型.. 差异仅与每个数据类型允许的最大字符数有关.. *TEXT 数据类型具有动态长度.. 并且仅使用内容所需的空间(加上一些字节用于设置单个实际长度) 补充@scaisEdge 写的内容,如果字段的插入数据太长会在两种方式下影响性能,有条件地查询它和查询它以获取值,就像一个带有base64图像的字段,但只是因为插入的文本的大小与类型无关。因此,如果您有一个最大大小的 TEXT 和一个带有一个字符的 LONGTEXT,那么 LONGTEXT 的查询速度会更快。 例如,我有大约 100000 个字符的值,对于读/写性能,使用 TEXT、MEDIUMTEXT 还是 LONGTEXT 都没有关系?在这种情况下,我总是会使用 LONGTEXT 来获得更大的未来限制。我仍然没有看到较小文本类型的任何优势? 如果您知道您的数据将适合较小的类型,您可以为每条记录节省一两个字节,因为长度字段较小。如果您有数百万条记录,那么这些字节就会加起来。 【参考方案1】:

唯一的区别是行数据中的长度字段。使用 MEDIUMTEXT 而不是 LONGTEXT 可以为每条记录节省 1 个字节。如果您有 1 亿条记录,则可以节省 100 MB。曾几何时,这会占用大量磁盘空间。

如果您遇到数据库行的大小限制,差异也可能很大。 *TEXT 数据的文本存储在表数据外部的文件中,因此不计入限制,但我相信 size 字段在表中,因此可以计入。

但如果这些都不是问题,请继续使用最大的类型,以确保您的架构不会过时。

【讨论】:

但是如果您使用的是MEDIUMTEXT,那么您可能正在使用多 MB 大小的字符串填充它。因此,您的 100M 记录将在数百个 TB 中。 确实超过了磁盘驱动器的大小和 InnoDB 的 64TB 表限制。因此,100MB 的“浪费”既微不足道,也不是您最大的问题。 我很确定,一旦超出了可存储的记录范围,1/2/3/4 字节的“长度”就会消失。也就是说,3 永远不会在 InnoDB 存储中出现。有一个 20 字节的指针指向行外溢出,不管溢出的大小。 @RickJames 好点。如果你只需要TEXT 时使用MEDIUMTEXT 可能更重要,那么你并没有填满磁盘,但你仍然在长度字节上浪费空间。 盲目使用BIGINT浪费空间更快。

以上是关于MySQL:使用 LONGTEXT 而不是 MEDIUMTEXT 是不是缺乏性能?的主要内容,如果未能解决你的问题,请参考以下文章

我应该使用另一列来显示 LONGTEXT 是不是包含数据? [关闭]

mysql longtext 可以储存多少个文字?

Grails GORM MySQL 生成 TEXT 或 LONGTEXT 列

将包含 LONGTEXT 字段的 MySQL 表索引到 Elastic Search

mysql中的longblob和longtext有啥区别?

mysql客户端中使用简单的SQL语句来更新名为‘desc’的longtext类型字段,报错1064