2013-03-16 54 views
3

我只是想看看別人怎麼看待這個問題。我有一個項目,每個用戶都有相當多的獨特信息。現在,鑑於沒有冗餘,並且有大量的用戶 - 將數據分成更小的表格會使其更快嗎?數據庫設計用戶表拆分或單個

我確實試過1000個查詢,其中一個有87個列,另一個只有登錄信息分開存儲。在我得到了1372ms,其他879ms;似乎一眼就看得更快,但是可能有人比我有更多的經驗,並且可以在這方面給出他們的觀點?

+4

你能否在這裏和那裏插入一些大寫字母和句號?最好將你的單詞塊轉換成句子。 – 2013-03-16 09:25:21

+0

您已經垂直分割表格(按列),而不是水平分割(由用戶),對嗎?請提供有關您的測量的更多詳細信息 - 最好是您使用的確切的DDL和DML SQL。 – 2013-03-16 10:35:36

+0

確定mysql inodb 240000個條目87個唯一的數據列。索引用戶名和5前鑰匙 – Netcfmx 2013-03-16 12:26:20

回答

3

在您的測試,如果從大的和小桌子使用「SELECT *」,返回所有列的查詢,那麼是的,當然大表會因爲它有返回更多的數據需要更長的時間。但是,在生產應用程序中,應用程序中的查詢應作爲目標,僅返回所需的列。

如果每個表具有相同的索引和正在過濾的數據,並且每個表都返回相同的選定列,則結果集應該可能大致在相同時間內返回。但是,我應該補充一點,考慮到性能測試,時間可能會非常具有誤導性。數據庫服務器的許多因素會不斷變化,並且與您正在運行的查詢無關,但絕對會影響其運行時間。而不是時間作爲衡量標準,請嘗試查看邏輯讀取。

至於你的設計問題,無論哪種方式將技術上的工作。但是,您可能需要考慮爲了幫助其他開發團隊而需要訪問特定數據的頻率。如果有80%的時間查詢了20%的列,那麼您可能需要考慮將這些列放在自己的表中。這應該有助於避免新開發人員花費大量時間來篩選通常不重要的數據列,以確定他們想要查詢的內容。

此外,從物理設計的角度來看,你可以放置需要對更高性能的磁盤驅動器上的較低性能的磁盤驅動器的80點%的數據頻繁訪問,如果成本是一個問題的20%表。

+0

好的,寫得很好的答案,好的指針爲OP :) – thaJeztah 2013-03-16 13:28:48

+0

非常好!謝謝。 – Netcfmx 2013-03-16 17:02:48