首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库:最佳实践-旧数据?

问数据库:最佳实践-旧数据?
EN

Stack Overflow用户
提问于 2009-12-22 07:05:23
回答 9查看 3.2K关注 0票数 2

我有一个汽车分类清单的数据库。

90天后,分类列表不再有效显示(列表过期);但是,为了存档目的,我希望保留该列表。

问题:从数据库设计最佳实践的角度和查询性能来看,是否最好将旧的A)保存在与当前列表或B)相同的表中,将过期的列表移到过期的表中并从当前的列表表中删除该列表?

换句话说,

选项A)

代码语言:javascript
复制
table_classified_listing:
car_id
expired = true | false
...

选项B)

代码语言:javascript
复制
// only current listing in this table (expired = false)
table_classified_listing:
car_id
...

// only expired listing in this table (expired = true)
expired_table_classified_listing:
car_id
...

更新

我对选项A的关注是,在我的MySQL数据库中--当我运行EXPLAIN时,它说它使用expired作为索引的主键。但是,对于我的查询搜索性能来说,更重要的是它使用price字段,因为我正在基于price > X进行搜索。因此,我考虑选择备选方案B。

EN

回答 9

Stack Overflow用户

发布于 2009-12-22 07:12:23

选项A)这样,您可以将所有数据放在一个地方,并且可以更容易地创建用于报告、列出用户历史条目等的查询。任何速度问题都应该通过该列上的数据库索引来缓解。选项B)是过早优化。

票数 6
EN

Stack Overflow用户

发布于 2009-12-22 07:11:33

一般性建议(你必须填补空白;- ):

  • 的性能在某些情况下只有(超过一百万条记录,巨大的行大小.)才有意义。
  • ,您是用“unions”来查询两个表,还是使用相同的查询?如果您不使用相同的查询来查询表,那么我建议使用不同的表(随着记录数量的增加,可能的性能增益,但大部分是,意思是增益)。

重复的一个问题是它可能会增加工作量(编写查询、测试查询.)。但是所有的技术(特别是现代技术)都允许你减少或取消复制。

例如,使用ORM,您可以拥有一个映射到公共字段但没有表的抽象实体,以及两个映射到表的子类。没有重复列信息。而且ORM也可以创建您的数据库脚本,所以您甚至没有这些脚本(当然,您应该手工查看它们以获得生产数据库)。

问题中更新后的更新:

你可以创建你想要的索引,别担心。如果您要查找的性能用于查询X上的价格未过期的数据,则创建一个索引(过期,价格),然后您就可以了:-)

票数 4
EN

Stack Overflow用户

发布于 2009-12-22 07:09:50

不要使用B,它基本上是分离属性。

我的做法是基本上使用两个日期列代替。ValidFromDate和ValidToDate.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1944627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档