You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB存4500-5000长度文本:TEXT(5000)与20个CHAR(250)查询性能对比

结论

TABLE1的查询性能明显更优,原因如下:

核心查询逻辑无差异

两种表结构的查询都是走TT_HASH唯一索引,InnoDB二级索引的查询流程完全一致:先查TT_HASH索引拿到主键TT_INDEX,再回表查聚集索引取文本内容,这一步不存在性能差别。

性能差距来自回表后的数据读取和处理开销

  1. 字段读取成本更低
    TABLE2用20个CHAR(250)定长字段存储文本,单条记录需要读取20个字段才能凑齐完整内容;而TABLE1只需要读取1个TEXT字段就能直接拿到完整文本,读取字段数少了20倍,IO开销更低。
    如果使用utf8mb4编码,20个CHAR(250)的最大存储长度为20*250*4=20000字节,已经超过InnoDB默认16KB的页大小,会触发行溢出,此时TABLE2需要读取20个溢出页才能拿到完整文本,而TABLE1最多只需要读取1次溢出页,开销差距会进一步拉大。

  2. 无额外拼接开销
    TABLE2拿到20个分段的文本后,不管是在数据库层用CONCAT函数拼接,还是在应用层拼接,都会产生额外的CPU开销,而TABLE1直接返回完整文本,完全没有这部分成本。

  3. 缓冲池命中率更高
    CHAR是定长存储,哪怕实际文本只有4500长度,20个CHAR(250)也会占用满额5000字符的存储空间;而TEXT是变长存储,只会占用实际文本长度对应的空间。TABLE1单行数据占用空间更小,相同大小的InnoDB缓冲池可以缓存更多行数据,缓存命中率更高,进一步提升查询性能。

内容的提问来源于stack exchange,提问作者user7242195

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:27:02