gpt4 book ai didi

PostgreSQL: "bytea"和 "bit varying"类型之间的区别

转载 作者:行者123 更新时间:2023-11-29 11:13:15 25 4
gpt4 key购买 nike

PostgreSQL 类型 byteabit varying 听起来很相似:

文档中没有提到任何一个的最大大小。是1GBcharacter varying?

我有两个不同的用例,都在一个有数百万行的表上:

存储 MD5 哈希值

那将是一个长度为 16 字节的 bytea 或一个 bit(128)。它将用于:

  • 重复数据删除:大量使用 GROUP BY,我想有一个索引。
  • 使用 WHERE md5 = 查询仅精确匹配。
  • 显示为供人类使用的十六进制字符串。

存储任意二进制数据

可变长度的二进制数据字符串,最大 4kB,用于:

  • 按位运算查找与特定掩码匹配的字符串。本文末尾的示例。
  • 提取一些字节,例如获取我的字符串中字节 14 的整数值。
  • 一些去重。

按位运算的工作示例,使用bit varying。掩码是 X'00FF00',它只返回行 X'AAAAAA'。我缩短了示例的字符串,但它会超过它们的全长,最多 4kB。是否可以用 bytea 做类似的事情?

CREATE TABLE test1 (mystring bit varying);
INSERT INTO test1 VALUES (X'AAAAAA'), (X'ABCABC');
SELECT * FROM test1 WHERE mystring & X'00FF00' = X'00AA00';

byteabit varying哪个更合适?

我看到 UUID 类型被用来存储 16 个字节,存储 MD5 有什么好处吗?

最佳答案

一般来说,如果您不使用按位运算,您应该使用 bytea

我在 bytea 中存储较大的值,然后将子字符串转换为 bit varying 以进行可能的位运算,这主要是因为客户对 bytea 的了解要多得多与 bit varying 一致,并且 I/O 格式更紧凑。

MD5 值应存储为 bytea。对它们进行按位运算毫无意义,您通常希望以二进制形式获取它们。

我认为 bit varying 确实有两个用途:

  • 存储字面意义上的位串的标志字段;和
  • 作为内部计算的临时数据类型

对于几乎所有其他内容,请使用 bytea

不过,没有什么能阻止您存储 4k 位域。

关于PostgreSQL: "bytea"和 "bit varying"类型之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26635547/

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