所以...假设我有一个有三个表的数据库:
表客户
表数据
和表 clients_to_data
我有一个API,允许客户端访问表数据中的数据。每个客户都有表客户中的记录(包括IP地址等)。要记录谁访问了什么,我登录表 clients_to_data (其中包含ID)表客户,表数据和时间戳。)
每次用户访问我的API时,他都会登录 clients_to_data 表。 (因此,客户和数据中的记录不会更新,只需阅读。)
我也希望能够获得每个客户的点击量。非常简单,只需使用client_id查询 clients_to_data 表并计算结果。但随着我的数据库的增长,我将在 clients_to_data 表中拥有数万条记录。
这是我的问题:
向表客户端添加字段“点击”是一种更好的做法,它存储该用户的点击量,并在每次用户查询API时增加
所以这会将redundancy
添加到数据库中,我听说一般都是坏事。但在这种情况下,我认为它会加快检索点击量的过程。
那么在这种情况下哪种方法更好更快?谢谢你的帮助!
答案 0 :(得分:2)
显然,从表中选择单个整数列会比从表中选择行的count()更快。
复杂的权衡取舍有点没有实际意义。 1种方法需要编写更复杂的sql,另一种方法是在代码中更新/插入2个表。
查询的点击次数是多少?您是客户查找,还是每月检查一次?如果你现在只看,我可能不会太在意选择计数(*)的时间。
如果您的客户在每次请求时查找了点击次数,那么我会查看存储点击列。
答案 1 :(得分:2)
什么时候更快? 附加到表将比查找记录和更新记录更快,比读取记录,增加和更新记录要快得多。
但是,如果点击“预先安排”,则会比聚合查询更快地计算它们。
你在环形交叉路口失去的秋千上获得了什么,你做出的选择取决于你目前的使用模式。那么你是否准备放慢速度增加命中率,以便在找到你有多少时获得显着提升?
答案 2 :(得分:1)
现在我们的表结构都已明确定义,让我们开始工作。
您希望在数据库中记录一些内容,即每个客户端访问数据的次数,换句话说,
将记录插入到“client_to_data”表中,以便为每个客户“展示”。
你担心两件事,
<强> 1。冗余
2.检索计数时的表现
存储计数时的性能如何。(插入语句)..?
这是一个经典场景,我会写入要插入内存缓存的数据,并在当天结束时进行批量插入。
更重要的是,我会在将数据插入数据库之前将其规范化。 至于选择,创建索引。如果是文本,请安装sphinx。
感谢。