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

Vil*_*iam 4 mysql sql database varchar

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

虽然我的数据库中的大多数条目将少于1000个字符,但有些可能最多需要4000个字符或更多.什么是限制长度varchar,这使得text一个更好的方法?

我不需要索引这些字段.

dan*_*ben 5

我没有亲身经历,但是这个人做了:

VARCHAR与TEXT - 一些性能数字

快速回答:varchar更快一点.

编辑 - 不,它不是.他对它们进行了不同的索引 - 他在varchar(255个字符)上有一个完整的索引,但在文本上有一个255个字符的前缀索引.当他删除它时,它们或多或少地表现相同.

后来在线程中是这个有趣的花絮:

当SELECT需要一个tmp表时,第一个选择是使用MEMORY,它只是RAM,因此可能明显更快.(第二个选择是MyISAM.)但是,MEMORY中不允许使用TEXT和BLOB,因此无法使用它.(还有其他原因可能会跳过MEMORY.)

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

MyISAM把TEXT和BLOB'内联'.如果你正在搜索一个表(范围扫描/表扫描),你正在"踩过那些牛圈" - 磁盘I/O成本很高.也就是说,在这种情况下,内联blob的存在会损害性能.

InnoDB只将767字节的TEXT或BLOB内联,其余的进入其他块.这是一种妥协,有时会有所帮助,有时会伤害性能.

其他东西(Maria?Falcon?InnoDB插件?)将TEXT和BLOB完全放在其他地方.与VARCHAR相比,这会在性能上产生明显的差异.有时TEXT会更快(例如,不需要blob的范围扫描); 有时VARCHAR会更快(例如,如果您需要查看和/或返回它).