【问题标题】:Is having flag in database better than querying a table every time?在数据库中有标志比每次都查询一个表更好吗?
【发布时间】:2014-11-18 07:40:20
【问题描述】:

我正在做一项工作,我在不同的技术之间做出决定,以遵循我的项目的简单规则。 问题是我必须检查用户是否是第一次执行插入任务。因为如果用户是第一次这样做,我必须给用户一个奖励积分。所以,问题是每次用户执行插入任务时“如果用户是第一次发帖,我是否必须针对该用户检查整个表?或者我应该在我的表,为此目的。如果用户群增加到数千,我会陷入最快和内存效率最高的优缺点。

提前致谢, :-)

【问题讨论】:

  • 只需在用户表中添加一个标志列,并在第一次插入完成时将其设置为 true。
  • 在你的真实世界场景中,过滤“标志列”之类的东西会更好,而不是检查用户的所有条目

标签: mysql database database-design erd


【解决方案1】:

听起来您来回进行的设计决策是所谓的“物化视图”的一种特殊情况。视图存储查询,并将结果作为表提供。物化视图存储查询的结果。您发现的优点和缺点是真实的。

在单个标志的情况下,这非常节省空间,因此也节省时间。您真正想问自己的问题是:使用标志时的加速是否值得更新标志时的减速?没有普遍的答案。

您可能还想编写一些额外的代码,通过扫描整个数据库来协调标志与现实。每当同一事实被存储不止一次时,就会出现矛盾的可能性。从理论上讲,这不能搞砸。实际上,墨菲定律占上风。

【讨论】:

  • 如果您没有任何存储问题,因为这些天存储非常便宜,而不是在您的数据库中为大多数检查设置一个标志是一个很好的方法,当您有数千个请求时它也更好处理。你不想给你的服务器带来压力吧?
猜你喜欢
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
相关资源
最近更新 更多