30

MyISAM 表和 MySQL 5.1 中哪个更好,Tinyint 具有 0 和 1 值或 ENUM 0,1?

4

5 回答 5

26

您可以BIT(1)按照mysql 5.1 reference中的说明使用。我不会推荐enumtinyint(1)bit(1)需要 1 位来存储布尔值,而tinyint(1)需要 8 位。

于 2010-08-23T09:33:32.040 回答
4

我的研究表明,对于 5.0.3 之前的 MySQL 版本,BIT(1) 是 TINYINT(1) 的同义词。

MySQL 5.0.3 之后的版本改变了 BIT 数据类型的工作方式。它不再是 TINYINT 的同义词,并且是唯一允许您在不到一个字节内存储任何内容的数据类型。

此数据类型可能比使用 TINYINT 或 ENUM 更可取。我计划在我的博客上测试一下哪个最快以及这三个的空间使用情况。如果您想查看大小和速度结果,底部有一个链接。测试平台:运行 OpenBSD 和 MySQL 的糟糕消费级 Pentium III 机器。(使用较慢的 DB 开发箱,您可以真正感受到不良代码的影响。此外,测试查询之间的差异更加明显。或者,尝试使用分配的资源几乎没有足够的 VM。)

MySQL 官方文档。

施瓦茨男爵对此有话要说。

http://www.xaprb.com/blog/2006/04/11/bit-values-in-mysql/

于 2011-10-19T03:48:45.023 回答
1

我建议 ENUM 更可取,因为它明确了预期的内容;如果它以任何可衡量的方式降低性能,我会感到非常惊讶。要让 tinyint 完成这项工作,需要 CHECK 对列的约束;目前没有一个 MySQL 存储引擎支持这个。

于 2010-08-23T09:30:32.370 回答
1

枚举,在某种程度上为开发人员或程序员提供了“提示”。但通常,最好以编程方式处理它。所以不管是ENUM(0,1), BIT(1) AND TINYINT(1),都使用1个字节,在大多数情况下,在客户端处理,而不是在bit(1)中发送2会更好或 enum(0,1) 到服务器,然后服务器将返回一个您无论如何都必须处理的错误 - 使用更多资源(网络 + 服务器 CPU + 客户端 CPU x 2)

0 通常表示错误,1 表示正确。

于 2013-04-18T00:26:42.463 回答
1

For the best performance and space requirements you should collect your boolean values and save them in the same TINYINT. Eg. Save up to 8 boolean values in a TINYINT. 16 boolean values in a SMALLINT etc. Both BIT(1) and ENUM uses at least 1 byte BIT(M) - approximately (M+7)/8 bytes see: https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html. So if you are storing 1 boolean value I would use TINYINT as it has the same overhead as BIT and ENUM but gives you the option to store 7 more boolean values later if you need.

于 2018-07-11T09:30:44.377 回答