履歴/監査テーブルの推奨事項を設計します
-
10-10-2019 - |
質問
私は長い間、多くのアイテムとその州を追跡する必要があります。
例
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のようなデータベースは、パーティション化されたクエリのサポートのためにはるかに優れているでしょうか?
どんなアイデアをありがとう!
解決
質問から始めましょう:
このテーブルの主な目標は何ですか?データを挿入するか、そこからデータを取得するには?
2つの可能性:
- 挿入については、これを正常化することをお勧めします。多くの冗長性があります。
- 取得するために:それはそうであるように良いです。各セットにサロゲートキーをお勧めします。
時間消費を比較する場合は、PostgreSQLをインストールして結果を確認してください。 OracleやMS-SQLを使用する必要はありません。PostgreSQLで十分です。
私の推奨事項はデータパーティションとは何の関係もないことを知っていますが、職場で同様のテーブルを持っていることは、私がそれを行う方法であり、それは正常に機能します。
私が助けることができることを願っています、
所属していません StackOverflow