我想設計一個快速數據庫模式,該模式可以像更新條目一樣處理排序和篩選列。針對高度經常更改的條目的最佳數據庫模式
爲此,我創建了以下場景:
- 事件都有一個確切的名稱,狀態,上次訂購的日期,描述和一個位置
- 的一個事件可用座位數保存隨着事件,每次將被更新的參與者subcribes
- 每一個事件都只有一個類別
- 只能按類別
- 事件被列出的事件可以按名稱,狀態或日期(不XOR)
- 事件可以按名稱,狀態或日期(XOR)進行排序
- 表必須處理超過10 MIO項
對於被過濾所有測試我使用MySQL和InnoDB表。我也嘗試儘可能多地使用多個插入/更新/刪除。一個用於類,另一個用於事件: 過濾是通過使用LIKE「%[字]%」
首先我試圖使用2個表來完成。索引是分類名稱,分類狀態名稱,分類日期名稱和分類日期狀態名稱。 爲此,列表,過濾和排序非常快,但插入,更新或刪除條目非常緩慢。我也有鎖超時,因爲重建索引花費了太多時間。
第二次嘗試是有3個表:類別,事件和位置。 但是,如果位置表包含6 mio或更多的條目,它也變得很慢。我認爲是因爲快速捕撈的指標。添加100k條目需要約272秒。的位置各指標主要指數ID和拉鍊街
下一個嘗試是創建一個自己的表,最後預訂的日期和計數器。但是如何過濾這個日期或者對這個日期進行分類呢?
是更好地有3個指標,如:類別的名稱,類別,日期,類別狀態或者是我用4個指標類別的名稱,類別,狀態,名稱,類別,日期,名稱的解決方案和類別日期 - 狀態名稱對MySQL更好?
我也在考慮字段類型:目前我使用VARCHAR作爲名稱。但是CHAR可能更好,因爲每個條目的長度都相同,所以跳到索引中的特定位置比使用變量長度更快。你怎麼看?
有人有一些提示如何設計一個好的和快速的數據庫架構,支持如上所述的場景?
索引是固定長度的,所以CHAR vs VARCHAR對索引無關緊要,儘管它對於表掃描很重要。 –
我不知道這一點。謝謝。我試圖通過在所有相關列上添加索引來避免表掃描 –