postgresql – 位掩码的整数和位(n)数据类型之间是否有区别?
我正在使用PostgreSQL数据库中的一个表,其中有一些布尔列可以确定某些状态(例如,已发布,可见等).我想制作一个单一的状态列,它将以一个位掩码的形式存储所有这些值以及可能的新值.在这种情况下,整数和位(n)之间是否有区别?
这将是一个相当大的表,因为它存储用户通过Web界面创建的对象.所以我想我将不得不使用(部分)这个列的索引.
如果你只有几个变量,我会考虑保留单独的
boolean 列.
>索引很容易特别是indexes on expressions和partial indexes. 如果您手中的全部变量不超过32个,则 >在磁盘上占用4个字节(可能需要对齐填充,取决于前面的列). 有更多的变量,或者如果你想操作的值很多,或者如果没有巨大的表或磁盘空间/ RAM不是一个问题,或者如果你不确定选择什么,我会考虑 >占用至少5个字节(或8个用于非常长的字符串)加1个字节,每组8位(向上舍入). 对于只有3位信息,单个布尔列获得3个字节,一个整数需要4个字节(可能是额外的对齐填充)和一个位字符串6个字节(5 1). 对于32位信息,一个整数仍然需要4个字节(填充),一个位串占用9个字节(5 4),而布尔列占用32个字节. 要进一步优化磁盘空间,您需要了解PostgreSQL的存储机制,特别是数据对齐. More in this related answer. This answer如何转换布尔型,位(n)和整数也可能有帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- WPF基础到企业应用系列7――深入剖析依赖属性(二)
- c# – VS Setup Project – .Net Framework 3.5或更高版本的
- 12、正则表达式中的Matcher类总结
- ruby-on-rails – Rails 3 ActiveRecord条件包括?
- c# – 什么.NET StringComparer是等效的SQL的Latin1_Genera
- flex 显示二进制图片
- ajax请求由get/post变成options由跨域引起
- AX 演示:使用单元测试框架测试类
- Oracle ORA-22908(NULL表值的参考)异常分析与解决方法
- ruby-on-rails – Rails 3 form_for用于自定义操作的嵌套路