我需要随时跟踪许多项目及其状态。
实施例
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这样的数据库会更好吗?
提前感谢任何想法!
答案 0 :(得分:0)
让我先问一个问题:
这张桌子的主要目标是什么?要在其中插入数据还是从中检索数据?
两种可能性:
如果您想比较时间消耗,请尝试安装PostgreSQL并查看结果。 您不应该使用Oracle或MS-SQL,PostgreSQL应该足够好。
我知道我的建议与数据分区无关,但是在工作中有一个类似的表,这就是我的工作方式,并且工作正常。
希望我能提供帮助,