gpt4 book ai didi

sql - SQL数据库可以支持 "insert only"模式吗?

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

近年来,“仅插入”方法越来越流行。对于那些使用 SQL DB 的人,您可能知道在大量更新 查询中,数据库正在锁定行,您开始遇到“瓶颈”。 Insert Only 模式是只使用插入(不更新)并始终检索数据库中的最新项目。

我面临的问题是 SELECT 查询,因为有一个字段对于数据库中的多个记录来说是通用的,如果我想通过它进行查询,我将永远不知道什么时候得到所有 上面字段的最新记录(除非我使用 GROUP 并且这不会有效)

方案示例:

假设我有以下方案:

CREATE TABLE users
(
id SERIAL NOT NULL
CONSTRAINT users_pkey
PRIMARY KEY,

first_name VARCHAR(255),
last_name VARCHAR(255),
username VARCHAR(255),
email VARCHAR(255),
password VARCHAR(255),
account_id INTEGER,
created_at TIMESTAMP NOT NULL
);

现在假设我有以下与帐号 1 相关的用户(使用 account_id):1. 无名氏2. 耆那教

如果我想在仅插入模式下编辑 John Doe 的姓氏,我将插入一条新记录,当我想检索它时,我将运行以下查询:

SELECT * from users WHERE email='jhon.doe@test.com' ORDER BY created_at Desc limit 1;

问题是如果我想检索帐户 1 的所有用户,我需要做什么?如何防止使用 group by 执行糟糕的查询

尽管我只有 2 个用户,但以下查询将返回 3 条记录

SELECT * from users WHERE account_id=1;

最佳答案

您问题的答案是distinct on(在 Postgres 中)。但是,不清楚您如何定义用户。我希望有一个 user_id,但也许 email 应该用于此目的。

查询看起来像:

select distinct on (email) u.*
from users u
where account_id = 1
order by email, created_at desc;

为了提高性能,您需要在 users(account_id, email, created_at desc) 上建立索引。

关于sql - SQL数据库可以支持 "insert only"模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56359709/

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