1

我需要隨時跟蹤許多項目及其狀態。歷史/審計表的設計建議

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能力數據庫這樣的數據庫會更好嗎?

在此先感謝您的任何想法!

+0

看看這篇文章,我對PTA發現,聽起來很相似http://www.simple-talk.com/sql/database-administration/database-design-a-時間點架構/ – Mallow 2011-06-14 21:29:59

回答

0

讓我從一個問題開始:

這張表的主要目標是什麼?在其中插入數據還是從中檢索數據?

兩種可能性:

  • 對於插入:我建議你一定要規範這一點,你將有很多冗餘的。
  • 檢索:這是很好的方式。我會爲每組推薦一個代理鍵。

如果您想比較時間消耗,請嘗試安裝PostgreSQL並查看結果。 你不應該需要使用Oracle或MS-SQL,PostgreSQL應該足夠好。

我知道我的建議與數據分區沒有任何關係,但在工作時有一個類似的表格,這就是我如何操作並且工作正常。

希望我能幫上忙,

+0

主要是檢索。今晚讓我們去看看它是否有效!謝謝! – Boon 2010-12-10 05:02:49