回答
寬桌子沒有什麼固有的錯誤。規範化的主要情況是數據庫大小,大量空列佔用大量空間。
您擁有的列越多,查詢就會越慢。
這只是一個事實。這並不是說你沒有理由擁有許多專欄。上面的內容並沒有給我們一個單一的理由,把一個實體的表格與許多列拆分成多個表格,列數更少。這種解決方案的管理開銷很可能超過任何感知的性能收益。
根據我對異常寬表(批量導入數據的非規範化架構)的經驗,我建議給你的第一個建議是儘量減少列數。我必須處理大量瘋狂的數據,並將大多數列保留爲VARCHAR(255)。我建議不要這樣。雖然便於開發,但性能會失去控制,特別是在使用Perl時。將列縮小到最小值(例如VARCHAR(18))非常有幫助。
存儲過程只是批量的SQL命令;除了某些類型的存儲過程的常規使用將最終使用緩存查詢計劃(這是性能提升)之外,他們沒有任何直接的速度。
您可以使用索引來加速某些查詢,但這裏沒有硬性規則和快速規則。良好的索引設計完全取決於您正在運行的查詢類型。根據定義,索引會使寫入速度變慢;它們的存在只是爲了讓你的閱讀更快。
在表中有很多列的問題是使用集羣主鍵查找行可能很昂貴。如果可以更改模式,將其分解爲許多標準化表格將是提高效率的最佳途徑。我強烈推薦這門課程。
如果不是,那麼您可能可以使用索引來加快一些SELECT查詢的速度。如果您的查詢僅使用少量列,則在這些列上添加索引可能意味着不需要掃描聚集索引。當然,就存儲空間和INSERT,UPDATE和DELTETE時間而言,索引總是要付出代價的,所以這可能不適合你。
當您通常需要特定行的所有字段時,寬表可以非常高效。您是否追查過您用戶的使用模式?如果他們通常只從多行中拉出一個或兩個字段,那麼您的表現將受到影響。主要問題是您的總行大小達到8k頁的大小。這意味着SQL必須爲每一行(第一頁+溢出頁面)打印兩次磁盤,並且不計算任何索引命中。
在Universal Data Models的傢伙將有一些好的想法重構你的表。 Red Gate的SQL Refactor使分割表更容易。
- 1. 數據庫設計和性能
- 2. 數據庫設計和性能
- 3. 連接表關係中的數據庫設計和可選性
- 4. 數據庫/模型設計 - 與另一個人相關的人
- 5. 數據庫表關係的設計
- 6. 有兩個相關表的數據庫設計
- 7. 數據庫設計最佳性能
- 8. 數據庫設計選擇性能
- 9. 設計數據庫模型和相關的sql查詢
- 10. 數據庫設計:與父表和父表關聯的第三個表
- 11. 關係數據庫設計:用於報表的重複屬性
- 12. MySQL數據庫設計 - 關係表
- 13. 關於數據庫表格設計
- 14. 關於設計數據庫
- 15. 關係數據庫設計
- 16. 關於數據庫設計
- 17. 數據庫設計和彈性搜索
- 18. 高可用性和數據庫設計
- 19. 如何設計一個高性能朋友的數據庫表
- 20. 關於合適的數據庫設計和實施與C#
- 21. 需要與數據庫表設計
- 22. 與PHP和mysql數據庫相互關聯的下拉列表
- 23. 如何獲取和設置與每月數據計劃相關的數據?
- 24. 數據庫設計:Discrimator與分離表關於約束
- 25. 爲數據庫性能選擇表設計
- 26. 數據庫設計性能VS一個表
- 27. CQRS和事件源與關係數據庫設計結合
- 28. 數據庫表設計與易用性。 (複合PK?)
- 29. 閱讀和寫表數據庫設計
- 30. 數據庫設計和大表?
每行存儲多少數據/列的大小/類型是多少?維基百科上的數據存儲位對介紹數據存儲/檢索方式的頁面和擴展區有很好的介紹。 http://en.wikipedia.org/wiki/Microsoft_SQL_Server – u07ch 2009-12-08 08:31:49