質問

私は長い間、多くのアイテムとその州を追跡する必要があります。

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で十分です。

私の推奨事項はデータパーティションとは何の関係もないことを知っていますが、職場で同様のテーブルを持っていることは、私がそれを行う方法であり、それは正常に機能します。

私が助けることができることを願っています、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top