数据库条目的存在取决于时间

时间:2011-01-12 01:49:42

标签: mysql database time

我有这种情况。

  • 拍卖系统列出“活跃”的订单(其截止日期尚未发生)
  • 有很多订单,所以最好让字段“有效”,而不是根据时间查询列出它们

我不是数据库专家,只是一个用户。实现此方案的最佳方法是什么?

  • 我是否必须手动检查“deadLine”字段并每隔一段时间更改“活动”状态?
  • Mysql能否自动更改字段?
  • “截止日期”已经过去的“选择订单”类型的查询有多苛刻
  • 使用布尔标准或时间戳标准进行搜索更好吗?它就像0,05%活跃9,95%被动条目

最后,我必须将旧订单条目移动到不同的备份表。我的观点是使表格变轻,因为每秒可能有很多请求。我不确定它对数据库施加了多少负载,是否在布尔值和搜索时间之间存在差异

2 个答案:

答案 0 :(得分:1)

我认为你的第二个要点是可疑的:

  

有很多订单,所以最好让字段“有效”,而不是根据时间查询列出它们。

最好为“订单”设置一个结束时间,然后通过在结束时间之前查找当前时间来查询活动订单。如果对其进行索引,则活动字段将为您提供糟糕的选择性(位图索引可能更好)。此外,您必须更新行以将其从活动更改为非活动 - 并且您可以在截止日期之前执行活动订单,因为活动标记未及时更改。

  1. 是的,您必须使用宝贵的DBMS查询带宽轮询应该处于非活动状态的活动标志。
  2. 不,它不能自动更改字段。
  3. 必要的UPDATE比选择更糟糕。
  4. 是的,你需要像结束时间戳这样的东西。
  5. 将旧订单移动到辅助存储(除主表之外的其他内容,不一定在DBMS之外,更不用说在磁带上)可能是一个好主意。它也不是时间关键;你可以在订单不再有趣之后的任何时候做到这一点。

答案 1 :(得分:1)

听起来你要做很多工作来解决一个问题,没有证据证明你有这个问题。特别是如果您要将旧记录归档,为什么不在创建专用于维护第二列的整个系统之前不能进行基于时间的搜索,该第二列执行与时间栏。

如果您确定需要保留单独的活动竞价列表,请考虑不使用特殊列(并且主要是浪费索引),而是创建一个仅包含主键列的active_auctions表。拍卖。为每个变为活动的竞价在此表中添加一行,并在变为非活动状态时将其删除。将此表格加入主要拍卖表,以获取当前有效拍卖的列表。