SQL&;网站-如何优化网站

SQL&;网站-如何优化网站,sql,postgresql,web,orm,Sql,Postgresql,Web,Orm,我想添加一些统计数据——用户发送给其他用户的消息数量。 现在,用户将转到他的面板并看到该数字。我应该执行吗 SELECT count(*) from MESSAGES where id=user.id 是否刷新每个用户面板页面?它不会杀死我的DB吗?对于exmaple 1k用户来说,刷新账户页面,另外还有几个恶作剧者会滥发F5 我在检索用户玩的游戏、上次登录日期等方面也有类似的问题。我想知道每次执行sql是一个好主意,还是应该将这些值缓存在local.storage中,并在每次更新DB值时增加

我想添加一些统计数据——用户发送给其他用户的消息数量。 现在,用户将转到他的面板并看到该数字。我应该执行吗

SELECT count(*) from MESSAGES where id=user.id
是否刷新每个用户面板页面?它不会杀死我的DB吗?对于exmaple 1k用户来说,刷新账户页面,另外还有几个恶作剧者会滥发F5

我在检索用户玩的游戏、上次登录日期等方面也有类似的问题。我想知道每次执行sql是一个好主意,还是应该将这些值缓存在local.storage中,并在每次更新DB值时增加它们?如果用户注销,则清除本地存储。但在这样的解决方案中,本地存储可能会变得非常庞大。例如,如果我们必须处理博客上的新闻或文章,该如何解决这个问题


你觉得怎么样?

除了我的评论

-- create field
ALTER TABLE users ADD COLUMN messages_total integer;
ALTER TABLE users ALTER COLUMN messages_total SET DEFAULT 0;
COMMENT ON COLUMN users.messages_total IS 'Users messages total.';

-- create trigger function
CREATE OR REPLACE FUNCTION "users_messages::update_statistics"()
  RETURNS trigger AS
$BODY$BEGIN
    IF TG_OP = 'DELETE' THEN
        UPDATE users SET messages_total = messages_total - 1 WHERE id = OLD.user_id;
    ELSIF TG_OP = 'INSERT' THEN
        UPDATE users SET messages_total = messages_total + 1 WHERE id = NEW.user_id;
    END IF;

    RETURN NULL;
END;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 5;

CREATE TRIGGER update_statistics
  AFTER INSERT OR DELETE
  ON users_messages
  FOR EACH ROW
  EXECUTE PROCEDURE "users_messages::update_statistics"();

性能问题需要大量信息,而您没有提供任何信息。我认为在您的情况下,最好将计数器的值存储在users表中的单独字段中。此外,您还需要在保存消息的表上的insert和delete之后创建触发器,并使用该字段中的触发器增量或减量统计信息。