gpt4 book ai didi

MySQL:在一列中存储多个 boolean 值。一个 tinyint(4) -vs- 几个 tinyint(4)

转载 作者:可可西里 更新时间:2023-11-01 07:49:08 24 4
gpt4 key购买 nike

我需要在 1 个表中存储 5 个 boolean 值。每个值都可以存储为 tinyint(4)。所以,有 5 个 tinyint(4)。我正在考虑将 5 个 boolean 值放入一个 tinyint(4) 中。相信大家比我还清楚,1字节存5位没问题:)第一个值可以存储为 0(假)或 1(真),第二个可以存储为 0(假)或 2(真),第三个可以存储为 0 或 4,第四个可以存储为 0 或 8,第五个可以存储为 0 或 16。因此,如果我们将这些值的总和存储在 tinyint(4) 中,我们就会准确地知道 5 个 boolean 值。

    For example, stored 21 -> 16 + 4+1.
So, if 21 is stored, we know that:
Fifth=true
Fourth=false
Third=true
Second=false
First=true.

我的问题是:只保留 1 个变量有意义吗?我们赢得了数据库容量(字节)和性能(少了 4 列,但这只是 4 个字节,而您实际上在同一个表中使用了 varchar(1000)),但每次我们必须从“总和”中“提取”一个正确的 boolean 值"使用 php 函数,这种情况经常发生(比方说当用户按下按钮时)。将 boolean 值作为总和存储在 1 列中是否有意义,所以您有 7 列而不是 11 列?

这个值,很清楚(因为那个表有更多的行,只有 2 行),不是键。

谢谢。

最佳答案

不要这样做 -- 除非该值是单个“不透明”的外部数据类型,例如标志枚举 -- 如果这些列将永远在查询中使用,或者将永远在所述“不透明”类型之外使用:使用离散/单独的字段。(正确的类型,正如 jmucchiello 和 MarkR 在他们的回答中指出的那样。)

在这里尝试“为了性能”只会让您厌恶数据库——尤其是这个数据库——当您以后必须“修复”它或解决丑陋的方案时。 (如果您遇到性能问题,您会知道……并且知道的足够多,可以在提问之前运行性能分析。)Donald Knuth 是对的,他指出97% 的东西都无关紧要。所以让它变得漂亮,让数据库做它想做的事。

快乐编码。


如果我在上面听起来很生气,那是因为我正在努力帮助其他人避免我犯过遇到的同样错误:-)

关于MySQL:在一列中存储多个 boolean 值。一个 tinyint(4) -vs- 几个 tinyint(4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8543100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com