2010-03-23 79 views
0

待辦事項分裂域到多個表不斷產生更快的查詢?考慮以下兩種情況:按字段拆分表以優化MySQL?

Table1 
----------- 
int PersonID 
text Value1 
float Value2 

Table1 
----------- 
int PersonID 
text Value1 

Table2 
----------- 
int PersonID 
float Value2 

如果值1和值2總是被顯示在一起,我想象中的第一個場景總是快的,因爲第二個架構將需要兩個SELECT語句。

但是否有在那裏你會選擇第二個情境?如果記錄的數量預計會很大?

回答

0

這就是所謂的Vertical partitioning,在某些特定情況下,可能會產生更好的性能。

Wikipedia

垂直分區超越正常化和分區列,即使已經標準化。不同的物理存儲也可能用於實現垂直分區;例如,將不常用或非常寬的列存儲在不同設備上是垂直分區的一種方法。

垂直分區的常見的形式是分裂(慢找)從其中所述動態數據不被用作通常爲靜態表中的(快速查找)的靜態數據的動態數據。

創建跨兩個新創建的表的視圖與性能損失恢復原始表,但是性能會例如訪問靜態數據時增加進行統計分析。

如何,何時以及MySpace的多長時間用於垂直分區,以解決其scalibiliy問題,你可能有興趣在檢查出下面的文章,於:

+0

cool!不知道該怎麼稱呼這一點。謝謝 – ack 2010-03-23 20:47:16

0

考慮你的模式1:有2個表格。如果你只是用personID和Value2插入大量數據(你最終會爲value1插入null),那麼這將是次優的。在這種情況下Schema2會更好。 (想想上面提到的每個學生都有一個與他有聯繫的部門的學校學系/學生,哪一個更好?Schema1?Schema 2)

如果value1和value2一起(例如SSN,FirstName,姓氏)​​Schema1(一張桌子)是理想的

一般的經驗法則是你會使用一個非規範化模式(table1)爲只讀/或主要只讀表和schema2(2個表)只寫/主要寫(或寫入次數超過一個非常大的值讀取)表

0

如果文字是定期一個非常大的文檔,甚至在某些時候它並不需要與其他兩種接入專欄我會分開他們。對於非常少量的行,您不會看到太多差異。嘗試使用數百萬行,掃描表所需的工作量變得非常不同。數據規範化的任何規則都不會導致你分割它們。 http://www.bkent.net/Doc/simple5.htm是一個很好的參考。像許多問題一樣,答案取決於細節。如果所有這些問題都有一個簡單的答案,數據庫管理系統就可以做,你甚至不必考慮這個問題。