Har*_*iec 3 mysql performance boolean tinyint
我需要在1个表中存储5个布尔值.每个值都可以存储为tinyint(4).所以,有5个tinyint(4).我想在一个tinyint(4)中放入5个布尔值.我相信,每个人都知道比我更好,5位可以被保存在1个字节,没有问题:)第一个值可以存储为0(假)或1(真),第二为0(假)或2( true),第三个为0或4,第四个为0或8,第五个为0或16.因此,如果我们将这些值的总和存储在tinyint(4)中,我们确切地知道5个布尔值.
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.
Run Code Online (Sandbox Code Playgroud)
我的问题是:只保留1个变量是否有意义?我们赢了分贝量(字节)和性能(4列少,但这只是4个字节,而你实际使用在同一个表的varchar(1000)),但是每次我们有时间来"提取"从"和适当的布尔值"使用php功能,这种情况经常发生(假设当用户按下按钮时).将布尔值存储为1列中的总和是否都有意义,因此您有7列而不是11列?
这个值很清楚(因为那个表有更多的行只有2个),不是键.
谢谢.
小智 6
不这样做 -除非该值是一个单一的"不透明"外部数据类型,如标志的枚举- 如果列将永远在查询中使用,或将永远被说外使用"不透明" type:使用离散/单独的字段.(正确的类型,正如jmucchiello和MarkR在他们的答案中指出的那样.)
在这里尝试"为了性能"只会让你厌倦数据库 - 特别是这个 - 当你必须"修复"它或者稍后解决丑陋的方案时.(如果你遇到性能问题,你就会知道它...... 并且知道在进行性能分析之前就已经足够了.)Donald Knuth指出97%的东西只是不重要.所以让它漂亮,让数据库做你想做的事情.
快乐的编码.
如果我在上面发出动画,那是因为我正在努力帮助别人避免犯同样的错误 DONE 遇到:-)
| 归档时间: |
|
| 查看次数: |
597 次 |
| 最近记录: |