1

我需要随时跟踪许多项目及其状态。历史/审计表的设计建议

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函数来执行查询。

但是,它很慢。查询无法使用索引,因为对于任何特定项目,必须先找到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能力数据库这样的数据库会更好吗?

在此先感谢您的任何想法!

+0

看看这篇文章,我对PTA发现,听起来很相似http://www.simple-talk.com/sql/database-administration/database-design-a-时间点架构/ – Mallow 2011-06-14 21:29:59

回答

0

让我从一个问题开始:

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

两种可能性:

  • 对于插入:我建议你一定要规范这一点,你将有很多冗余的。
  • 检索:这是很好的方式。我会为每组推荐一个代理键。

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

我知道我的建议与数据分区没有任何关系,但在工作时有一个类似的表格,这就是我如何操作并且工作正常。

希望我能帮上忙,

+0

主要是检索。今晚让我们去看看它是否有效!谢谢! – Boon 2010-12-10 05:02:49