4

我需要在 MySQL TABLE 中存储一个字段,该字段只有 0 到 53 之间的数字。这些数字永远不会小于 0 或大于 53。什么可以提供更好的性能并且是存储这些数字的最有效方法?

TINYINT(2)
TINYINT(2) UNSIGNED

还是另一种方法?谢谢!

4

1 回答 1

2

我会选择TINYINT UNSIGNED,因为它是一种基本类型,并且 MySQL 知道如何有效地处理它。[0-53]在 6 位范围内:考虑以某些特殊结构为代价节省 2 位,随之而来的开销可能不是一个好主意。

而且Unsigned由于(取决于读取数据的语言)您想要处理正数。在您使用的语言中,带符号的值可能会有一些差异(例如右移位,如果值已被处理,它将从左到右扩展符号位)。这取决于您的需求和操作。

至于 CPU,数据总线(通常)是 32 位或 64 位。例如,使用 32 位而不是 8 位可能在性能方面具有一些优势,但

  • 显然,每个值占用 4 倍的空间
  • 性能方面,当检索多行数据时,MySQL 会优化传输(一次不返回一个字节),因此不会有太大的不同。
于 2013-06-05T10:27:59.173 回答