MySQL 多个位列或 1 个枚举列

MySQL multiple bit columns or 1 enum column

我正在为日志系统设计数据库表。关于一个领域,我有两个想法。我应该创建三个“bit(1)”属性 还是一个“enum”属性?

is_error bit(1)
is_test bit(1)
is_embedded bit(1)

boolErrors enum(is_error_true, is_error_false, is_test, is_test_false, is_embedded_ is_embedded_false)

显然,持有枚举在语义上似乎不合适 space 但性能如何。当我有 3 列而不是 1 列时,获取时间会增加吗?

如果这些标志看起来代表 状态(也就是说,在给定的时间点可能只有一个标志为真),那么我会推荐一个专栏, 作为 integer 数据类型。您可以使用引用 table 来存储所有可能的标志及其名称,而不是使用 ENUM,使用整数列从原始 table 引用它。

另一方面,如果可能有多个标志(例如,is_erroris_test),那么单列是不够的。您可以创建多个列(如果标志列表永远不变),或者使用桥 table 将每个状态存储在单独的行中。

如果一次只能设置其中一个标志,请使用 ENUM

如果可以同时设置多个标志,则使用SET

性能真的不是什么值得担心的事情。在 table 中处理行的主要“成本”是获取行,而不是列中发生的事情的详细信息。

当然,“越小越好”有几个原因——I/O,等等。但是 ENUM 是 1 或 2 个字节; a SET 最多 8 个字节(最多 64 个标志)。对于任何用例来说,这两者都相当小。

至于速度和可索引性,让我们看看主要的查询。