如果我有一個大的表,其列的值範圍相當有限(例如< 100),將此表分成幾個名稱與該列值相關的表是合理的嗎?基於列值將數據劃分到不同的表中是否合理?
E.g.像列的表:
table "TimeStamps": [Id] [DeviceId] [MessageCounter] [SomeData]
其中[DeviceId]
是「有限範圍」一欄將被分成幾個不同的表:
table "TimeStamps1": [Id] [MessageCounter] [SomeData] table "TimeStamps2": [Id] [MessageCounter] [SomeData] ... table "TimeStampsN": [Id] [MessageCounter] [SomeData]
我跟我原來的表遇到的問題是要找到一個某些DeviceId值的最大MessageCounter值需要很長時間才能執行(請參見this後)。
如果表格會被分開,找到最大列數應該是O(1)操作。
[編輯]
只是偶然發現了這一點,以爲我會更新它。通過一些適當的索引配置和預定索引重組工作,我能夠以規範化的形式獲得優異的性能。我建議嘗試SSMS 數據庫引擎優化顧問工具爲每個瓶頸查詢,這是非常有幫助的(對於誰的主要工作不是數據庫設計)。
好的,非常感謝,原來我訂購的組合索引中的列完全錯誤。將DeviceId列移動到索引頂部會立即返回結果。 – Groo 2010-10-21 11:14:48
@格羅:是的,有索引的列順序很重要。我過去遇到過同樣的問題。 – sleske 2010-10-22 11:24:49
+1這種解決方案(由Groo提出)是一種'絕望的措施'。在走這條路之前做調整 - 特別是索引調整是一條路。 – 2010-10-28 18:15:55