我需要随时跟踪许多项目及其状态。历史/审计表的设计建议
例
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能力数据库这样的数据库会更好吗?
在此先感谢您的任何想法!
看看这篇文章,我对PTA发现,听起来很相似http://www.simple-talk.com/sql/database-administration/database-design-a-时间点架构/ – Mallow 2011-06-14 21:29:59