多くのアイテムとその状態を常に追跡する必要があります。
例
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の疑似ランク関数を使用してクエリを実行します。
ただし、非常に遅いです。特定のアイテムについては、フィルタリングを実行する前にランク= 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のようなデータベースは、パーティション化されたクエリをサポートしているため、はるかに優れていますか?
アイデアをよろしくお願いします!