对于MySQL中的innodb表,哪个更快:varchar(255)还是tinytext?

And*_*ift 7 mysql optimization varchar innodb tinytext

我在MySQL中优化了一些innodb表,所以我运行了analsye()程序以查看建议是什么.

对于之前设置为varchar(255)的所有字段,结果建议使用tinytext而不是 varchar(255)

是否有一个性能增益,以通过使用了TINYTEXT?我只关心这里的速度,而不是尺寸.

小智 6

不要相信是否有人告诉你TINYTEXT以其他方式存储,而不是VARCHAR.

实际差异是:

  • TINYTEXT和其他TEXT字段与MySQL堆内的内存行分开存储,而VARCHAR()字段加起来限制为64k(因此TINYTEXT中可以有超过64k,而不能使用VARCHAR).

  • TINYTEXT和其他"blob-like"字段将强制SQL层(MySQL)在使用它们时使用磁盘上的临时表,而VARCHAR仍将在"内存中"排序(尽管将在整个宽度上转换为CHAR) .

  • InnoDB内部并不关心它是tinytext还是varchar.它很容易验证,创建两个表,一个使用VARCHAR(255),另一个使用TINYINT,并向两者插入记录.它们都将采用单个16k页面 - 而如果使用溢出页面,TINYTEXT表应显示为在"SHOW TABLE STATUS"中至少占用32k.

我通常更喜欢VARCHAR(255) - 它们不会对单行造成太多的堆碎片,并且可以在MySQL内存中作为单个64k对象处理.在InnoDB上,大小差异可以忽略不计.