我最近一直在学习bit string
数据类型,我很好奇:
在这个文档页面的底部有一句话:
...加上 5 或 8 个字节的开销,具体取决于字符串的长度
在其他语言(如 PHP、Java、C#、C++ 等)中,如何通过 Npgsql、ODBC 等驱动程序处理位字符串?
对于问题 #1,使用 smallint 或 bigint 将提高存储效率,并且可能会提供性能提升,因为在任何地方都支持整数。大多数编程语言都可以轻松处理整数的位操作。如果是这样,那么引入位串数据类型的意义何在?是否仅适用于需要大量位掩码的情况?位域索引可能吗?我对 PostgreSQL 中如何进行位域索引比较好奇。
对于#2,我很困惑,不仅仅是好奇。例如,如果我将工作日位掩码存储在 bit(7) 字段中,一天一位,最低位代表星期一。然后我在 PHP 和 C++ 中查询该值。我会得到什么?文档说我会有一个位串,但是位串不是我可以直接使用的 - 就像整数一样。那么在这种情况下,我应该放弃位域吗?
任何人都可以详细说明为什么以及何时应该使用一点或一点变化?
Erw*_*ter 22
如果您只有几个变量,我会考虑保留单独的boolean
列。
NULL
如果需要,布尔列允许单个位的值。NOT NULL
如果不这样做,您始终可以定义列。如果您拥有多于一手的完整变量但少于 33 个,那么一integer
列可能最适合您。(或bigint
最多 64 个变量。)
=
运算符)的快速索引。bit string
或更慢/更不方便boolean
。使用更多变量,或者如果您想大量操作这些值,或者如果您没有巨大的表和磁盘空间/RAM 没有问题,或者如果您不确定选择什么,我会考虑bit(n)
或bit varying(n)
。
对于仅3 位信息,单个boolean
列integer
需要3 个字节,需要 4 个字节和bit string
6 个字节 (5 + 1)。
对于32 位信息,ainteger
仍然需要 4 个字节,abit string
占用 9 个字节(5 + 4)和boolean
列占用 32 个字节。
所有 PostgreSQL 类型对于某些事情都有用,而对于另一些事情则不太有用。一般来说,先担心功能再担心性能会带来更多好处。PostgreSQL 拥有大量用于操作各种数据类型的函数,这些也不例外。
我希望在应用程序层上,除非您的数据库驱动程序通过某种类型转换来处理它,否则您将获得字符串表示形式并且必须处理它。因此,它可能有用也可能没用。
当您想要基于按位运算(例如按位或或按位与,或以其他方式操纵 SQL 查询中的数据)时,它可能很有用。除非您这样做,否则 PostgreSQL 的许多深奥功能的帮助不大。
另请注意,对于较长的二进制信息字符串,有一个大对象接口,允许您进行流式传输等,还有一个字节接口,它允许更紧凑的字符串表示。
TL; 博士:如果你需要它,你就会知道。否则,请将其归档在您头脑中的“保留以供将来使用”部分中。
归档时间: |
|
查看次数: |
15184 次 |
最近记录: |