设计历史/审计表的建议

时间:2010-12-09 00:38:57

标签: mysql database database-design data-structures database-partitioning

我需要随时跟踪许多项目及其状态。

实施例

ItemId Location  DateTime           State
   1   Mall A    2010-02-03 07:00   on_sale
   1   Mall A    2010-02-20 08:22   sold
   2   Warehouse 2010-02-02 09:00   on_sale
   2   Transit   2010-03-02 16:20   transit
   2   Mall B    2010-03-03 10:10   on_sale
   2   Mall B    2010-03-12 12:11   sold

现在,这是一个庞大的表,我使用MySQL的伪等级函数来执行查询。

但是,它很慢。查询无法使用索引,因为对于任何特定项目,它必须先找到rank = 1的项目才能执行任何过滤。

SELECT 
    item_sorted.*, IF(@prev <> item_sorted.item_id, @rownum := 1, @rownum := @rownum+1) AS rank,
    @prev := item_sorted.item_id
FROM ...

您在实施此类功能方面有哪些经验? 您推荐的数据库设计是什么? 由于支持分区查询,像Oracle或支持T-SQL的DB这样的数据库会更好吗?

提前感谢任何想法!

1 个答案:

答案 0 :(得分:0)

让我先问一个问题:

这张桌子的主要目标是什么?要在其中插入数据还是从中检索数据?

两种可能性:

  • 插入:我建议你将其标准化,你会有很多冗余。
  • 用于检索:它的方式很好。我会为每一套推荐代理密钥。

如果您想比较时间消耗,请尝试安装PostgreSQL并查看结果。 您不应该使用Oracle或MS-SQL,PostgreSQL应该足够好。

我知道我的建议与数据分区无关,但是在工作中有一个类似的表,这就是我的工作方式,并且工作正常。

希望我能提供帮助,