2012-06-07 59 views
5

我想知道哪種方法更適合設計數據庫?主表有幾百個vs幾個較小的

我目前有一個大表(每行97列)引用查找表,我可以。

將某些列分組到較小的表中並將它們添加到引用一整行的關鍵列不是更好嗎?

+0

** [在此檢查](http://stackoverflow.com/a/10931849/1425057)** – 2012-06-07 17:24:42

回答

3

如果您將表格拆分爲多個部分,則需要額外的連接才能將所有列都排成一行 - 這會花費您的時間。

97列不多,真的 - 我見過遠遠超出100

這一切都取決於如何使用你的數據 - 如果你的行只是有97列,所有的時間,和需求到97列 - 那麼把它們分解成不同的表格真的很難理解。

這可能是有意義的,如果:

  • 您可以將一些「大」的列(如XMLVARCHAR(MAX)等)到一個單獨的表,如果你不需要這些所有的時間 - >在這種情況下,您的「基本」行變小,您的基本表會更好 - 只要您不需要那些超大的列

  • 您可以將一些列移動到不是單獨的表總是存在,例如可能是「可選」的列,僅用於例如20%的行 - 在這種情況下,您可以爲其餘80%的不需要這些列的情況節省一些處理。

+1

+1:並消除列如:Comment1,Comment2,Comment3 ... – JeffO

+0

@marc_s所以看來,SQL Server更好地處理操作整數而不是基於文本的值? –

+0

@AdrianK .: SQL Server更好地處理數據類型越小的操作,因爲固定長度類型的開銷較少,所以更喜歡固定長度類型(如INT)超過可變長度。 –

0

將相關列分組到不同的表中會更好。這將提高數據庫的性能,並提高程序員的易用性。你應該首先找出你的列之間的所有不同關係,然後你應該試着把所有的東西都分解成表格,同時牢記這些關係(使用主鍵,分支鍵,引用等等)。試着創建一個圖表作爲這http://www.simple-talk.com/iwritefor/articlefiles/354-image008.gif並從那裏採取。

+0

不一定!將多個「零件」分配給單個行也意味着需要額外的JOIN,而且這些「零件」不是「免費的」 - 將表連接在一起需要花費時間! –

+0

@marc_s是的,但是當你用一個單元格查詢一個帶有97個列的表格時,有一個更小的表格要好得多。另外爲了組織的目的,它也更有意義。 (當然取決於數據本身..如果數據是全部97 cols所有相關,然後保持這種方式,但我懷疑) –

0

除非您的數據是非規格化的,否則最好將所有列保留在同一個表中。 SQL Server從各個表中將頁面讀入緩衝池。因此,即使訪問的頁面已經在緩衝池中,每次訪問都會產生連接代價。如果你用一個鍵訪問每個查詢的幾行數據,那麼一個索引將會用同一個表中的所有列來處理這個查詢。即使您將掃描大部分行(大於大表的1%),但只有97列中的少數幾列,仍然可以將列保留在同一個表中,因爲您可以使用非聚集索引查詢。但是,如果數據嚴重非規範化,那麼對其進行規範化處理,根據規範將其分解成許多表格以消除冗餘,將會大大提高性能,並且您將能夠編寫查詢以僅訪問特定數據你需要的元素。

相關問題