2011-06-15 73 views

回答

10
  1. 垂直分區的大型表,以減少I/O和緩存的要求 - 單獨的列,經常查詢與罕見。

  2. alter table「太貴」時,向生產系統添加一列。

  3. Super-type/subtype模式。

  4. 垂直分區受益於表(連接)消除 - 提供優化器 支持它(再次減少I/O和高速緩存)。

  5. Anchor modeling - 類似4,但下降到6NF

0

是的一般。

如果您想要爲列的子集分配不同的權限,可能會有一個例外。

也認爲只有在雙方都需要時纔是如此。

0

原因之一是將頻繁訪問的數據放在一張表中,而在另一張表中訪問的數據極少。它會運行得更快並節省一些內存。

但我必須在我做這件事之前把我的手臂擰得很厲害。

1

有時它對桌子鎖非常有用。當您將一列添加到數據庫時,整個表將被鎖定,直到完全重寫。當你的數據庫有100k行時,這幾乎沒有影響。但如果你有100M行或1B行,這是一個完全不同的故事......

這對避免佔用太多空間的死行也很有用。如果您使用的是MVCC,並且您的某些列經常被覆蓋,偶爾可以將它們放在單獨的表格中。可以說,自動吸塵最終會啓動,但爲了節省硬盤驅動器的工作,最好在單獨的表格中抽出幾個int字段,而不是整行文本,varchar(n)和誰知道還有什麼。

最後一個原因是在ORM中濫用select *。例如,如果您要存儲圖片或博客帖子/文章,則可以將blob /文本字段存儲在單獨的表格中。因爲每當它由於某個原因被加載時,ORM將加載整行。當你只需要你的圖像或文章的URL時,你想要的最後一件事就是從數據庫中提取整個二進制/文本;但你的ORM將做到這一點......