Postgresql列类型性能



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

  1. Json型

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

  2. 字符串型

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

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

我建议规范化您的设计。我建议创建另一个表,称为桥接表,将每个用户/水果存储在一个单独的行中,而不是将多个值存储在一列中(作为JSON或分隔字符串(。

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
);

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

然后,你可以轻松高效地查找所有拥有水果的用户;苹果;带有类似的查询

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'
)

最新更新