Postgresql 列类型性能

Postgresql column type performance

所以,假设我需要创建一个 table。其中一列将包含一个字符串数组,例如有人买的水果。现在,我需要执行查询,比如谁买了哪种水果,例如苹果等。现在,我可以为该列选择两种数据类型:

  1. Json类型

    使用这种方法,该列将存储 JSON 对象并使用 POSTGRESQL json 运算符来检查是否存在水果。

  2. 字符串类型

    有了这个,我们连接每个水果,例如“苹果橙葡萄”。要检查是否存在,我们可以使用 LIKE 函数或任何其他字符串匹配函数。

虽然我没有对自己进行基准测试,但我想从专家那里了解哪种方法是最好的。让我们假设对于任何一行,水果的数量都不会超过 200。我们也会得到更新,但更新频率并不高。我们很可能会收到比更新更多的查询。

我建议规范化您的设计。我建议创建另一个 table,称为桥 table,其中每个 user/fruit 将存储在单独的行中。

create table users (
    user_id serial primary key,
    name text
);

create table fruits (
    fruit_id serial primary key,
    name text
);

create table users_fruits (
    user_id  int references users(user_id)   on delete cascade,
    fruit_id int references fruits(fruit_id) on delete cascade
);

这是关系数据库中存储多对多关系的规范方式(一个用户可能有多个水果,一个水果可能属于多个用户)。

然后,您可以使用如下查询轻松高效地查找所有拥有水果“apple”的用户:

select u.*
from users u
where exists (
    select 1
    from users_fruits uf
    inner join fruits f on f.fruit_id = uf.fruit_id
    where uf.user_id = u.user_id and f.name = 'apple'
)