在MySQL中使用text
类型而不是大varchar
时,是否存在任何比较,个人经验或指南?
虽然我的数据库中的大多数条目将少于1000个字符,但有些条目可能最多需要4000个字符或更多。 varchar
的限制长度是什么使text
成为更好的变种?
我不需要索引这些字段。
答案 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)。
如果你有足够的负荷那么重要,那么你应该进行自动化测试。