【问题标题】:varchar(255) vs tinytext/tinyblob and varchar(65535) vs blob/textvarchar(255) vs tinytext/tinyblob 和 varchar(65535) vs blob/text
【发布时间】:2011-12-07 00:35:16
【问题描述】:

根据定义:

VARCHAR:Length 的范围是 1 到 255 个字符。 VARCHAR 值以不区分大小写的方式进行排序和比较,除非给出了 BINARY 关键字。 x+1 字节
TINYBLOB、TINYTEXT:BLOB 或 TEXT 列,最大长度为 255 (2^8 - 1) 个字符 x+1 个字节

所以基于此,我创建了下表:

CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255),
  `lastname` tinytext,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

或者创建一个 varchar 或 tinytext 以及为什么更好?

是否也一样:

VARCHAR:长度范围> 255 个字符。 VARCHAR 值以不区分大小写的方式进行排序和比较,除非给出了 BINARY 关键字。 x+2 字节
BLOB, TEXT BLOB 或 TEXT 列,最大长度为 65535 (2^16 - 1) 个字符 x+2 字节

【问题讨论】:

  • VARCHAR 需要较少的内存开销,但它们通常会在内存中完全读取,因此最后 VARCHAR 可能仍会使用更多内存。他们都是不同的。您使用 BLOB 来存储二进制数据,例如图像、音频和其他多媒体数据。和 VARCHAR 存储任何大小的文本,直到限制。

标签: mysql


【解决方案1】:

在这种情况下varchar 更好。

请注意,varchar 可以是 1 到 65535 个字符。

VARCHAR 列中的值是可变长度字符串。在 MySQL 5.0.3 之前,长度可以指定为 0 到 255 之间的值,在 5.0.3 及更高版本中可以指定为 0 到 65,535 之间的值。 MySQL 5.0.3 及更高版本中 VARCHAR 的有效最大长度取决于最大行大小(65,535 字节,在所有列之间共享)和使用的字符集。请参阅第 E.7.4 节,“表列数和行大小限制”。

Blob 保存在文件的单独部分中。
它们需要额外的文件读取才能包含在数据中。
因此,获取 varchar 的速度要快得多。

如果您有一个不常访问的大 blob,那么 blob 更有意义。
将 blob 数据存储在单独的(部分)文件中可以让您的核心数据文件更小,从而更快地获取。

【讨论】:

  • 这是否更好取决于您的数据访问模式。
  • 可能是哪个单独的文件?
  • Blob 不会保存在单独的文件中。但它们存储在与其他列不同的物理位置。
  • 请注意,这不仅取决于访问频率,还取决于对数据执行的操作。例如,任何需要表扫描的查询(这通常是不好的),但不是文本列会因为扫描的大量数据而变得更糟。
  • 我还怀疑如果数据存储在页外,不使用此列的文件排序可能会更有效,尽管我不确定查询优化器是否足够聪明,不会提取这些数据。
猜你喜欢
  • 2010-09-13
  • 2011-11-09
  • 2015-05-12
  • 2010-11-01
  • 2011-02-11
  • 1970-01-01
  • 2011-10-27
  • 2021-03-17
相关资源
最近更新 更多