在MySQL中使用text而不是varchar类型有什么真正的性能影响?

时间:2010-01-07 00:42:29

标签: sql mysql database varchar

在MySQL中使用text类型而不是大varchar时,是否存在任何比较,个人经验或指南?

虽然我的数据库中的大多数条目将少于1000个字符,但有些条目可能最多需要4000个字符或更多。 varchar的限制长度是什么使text成为更好的变种?

我不需要索引这些字段。

2 个答案:

答案 0 :(得分:5)

我没有亲身经历,但这家伙确实:

VARCHAR vs. TEXT - some performance numbers

快速回答:varchar更快一点。

修改 - 不,不是。他对它们进行了不同的索引 - 他在varchar(255个字符)上有一个完整的索引,但在文本上有一个255个字符的前缀索引。当他删除它时,它们的表现大致相同。

线程的后期是这个有趣的小窍门:

  

当a需要tmp表时   SELECT,首选是使用   MEMORY,因此只有RAM   可能明显更快。 (第二   选择是MyISAM。)但是,TEXT和   MEMORY中不允许BLOB,所以它   不能用它。 (还有其他原因   为什么它可能会跳过MEMORY。)

编辑2 - 一些更相关的信息,这次比较不同指数处理各种类型的方式。

  

MyISAM将TEXT和BLOB'内联'。如果   你在寻找一张桌子(范围扫描   / table scan),你正在踩到   那些奶牛' - 对于磁盘而言代价高昂   I / O。也就是说,存在了   内联blob在这方面伤害了性能   情况下。

     

InnoDB只放置一个TEXT的767个字节   或BLOB内联,其余的进入   其他一些块。这是妥协   这有时会有所帮助,有时会受伤   性能

     

其他的东西(玛丽亚?猎鹰?InnoDB   插件?)完全放置TEXT和BLOB   别处。这会成为一个   性能明显不同   与VARCHAR相比。有时   TEXT会更快(例如,范围扫描   那不需要blob);   有时VARCHAR会更快   (例如,如果你需要看它和/或   归还吧。)

答案 1 :(得分:1)

当然,了解最好的方法是使用您的真实数据集自己运行一些测试,或者至少是模拟等效项。只需编写一些脚本来填充数据并运行您的选择。使用不同大小的varchar进行测试,然后进行文本测量,并测量时序和整体系统利用率(cpu / load,memory,disk i / o)。

如果你有足够的负荷那么重要,那么你应该进行自动化测试。