【问题标题】:What is the disadvantage to using a MySQL longtext sized field when every entry will fit within a mediumtext sized field?当每个条目都适合中等大小的字段时,使用 MySQL 长文本大小的字段有什么缺点?
【发布时间】:2011-11-10 23:54:46
【问题描述】:

当每个条目都适合中等文本大小的字段时,使用 MySQL 长文本大小的字段有什么缺点?

我问的原因是因为我有一些长文本大小的字段,并且最近意识到它们太大了,但后来却难以激励自己做出微小的改变,因为“有什么害处?”所以这个问题。

【问题讨论】:

    标签: mysql comparison longtext


    【解决方案1】:

    唯一的存储大小差异是为“这个字段有多少字节”数字分配的字节数。来自fine manual

    TINYTEXT    L + 1 bytes, where L < 2^8  
    TEXT        L + 2 bytes, where L < 2^16
    MEDIUMTEXT  L + 3 bytes, where L < 2^24
    LONGTEXT    L + 4 bytes, where L < 2^32
    

    所以longtext 将使用比mediumtext 多一个字节来存储相同的文本。手册的Data Type Storage Requirements 部分提供了更多信息,The BLOB and TEXT Types 部分提供了更多信息。

    四种 TEXT 类型之间没有实际区别。

    【讨论】:

    • 这是我的假设。唯一真正的区别是每行使用 1 个额外字节的空间。那是对的吗?如果是这样,我无法想象为什么除了longtext之外还有任何字段选项?
    • @darkAsPitch:AFAIK 1 个额外的字节是唯一的区别。由于历史原因,可能有四种类型。
    • mediumtext和longtext之间没有读写性能差异,只有存储?如果是这样,4 个字节无关紧要,您应该始终更喜欢长文本而不是中文本?
    • 通过多种类型(不仅是长文本),您可以确保数据库/存储不会被错误/恶意输入淹没。
    【解决方案2】:

    Mysql 多次使用临时表来执行查询。 所以大字段的缺点是MySql会为列保留那么多空间。

    如果您将该列标记为 longtext 与 mediumtext 相比,您将使用相同的数据执行缓慢

    【讨论】:

    • 但是 MySQL mediumtext 和 longtext 列类型是可变长度的,它们之间的唯一区别是为列大小分配的字节数。
    • 如果内部临时表最初创建为内存表但变得太大,MySQL 会自动将其转换为磁盘表。 dev.mysql.com/doc/refman/5.5/en/internal-temporary-tables.html
    • LONGTEXT 为 4 GB。当查询中涉及 LONGTEXT 列时,Mysql 是否在临时表中保留 4 GB 空间(每行)?当涉及多于几行时,这似乎不可行。
    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    相关资源
    最近更新 更多