【发布时间】:2009-12-22 07:05:23
【问题描述】:
我有一个汽车分类列表数据库。
90天后,分类listing不再有效展示(listing过期);但是,我想保留列表以供存档。
问题:从数据库设计最佳实践和查询性能的角度来看,将旧列表 A) 保留在与当前列表相同的表中是否更好或B),将过期列表移至过期表并从当前列表表中删除该列表?
换句话说,
选项A):
table_classified_listing:
car_id
expired = true | false
...
选项B):
// 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。
【问题讨论】:
-
Timk,这里我们使用
A,但我建议不要执行 is_enabled 除非该字段真的很重要,而是在数据库中记录 time_entered 并在代码中计算过期间隔或使用视图。我可以看到一个用例,人们/想要/查看超过 30 天的分类列表。
标签: database database-design rdbms