2016-08-08 25 views
3

MySQL表什麼是數據庫設計的更優化的方法嗎?動態創建每個帳戶或少數幾個大表

我正在構建一個應用程序,其中不同的公司註冊並添加其用戶並使用該應用程序。我需要每個帳戶最多10個表格。 e.g

table1, table2, table3..table10

這是我在做什麼目前,有10個表和存儲來自所有帳戶的這些所有的信息。但是我剛剛得到了一個擴展我的數據庫設計的想法。這樣的想法是隻要有人創建一個公司賬戶,我的應用程序將動態地創建這些表如下所示:

c_31_table1, c_31_table2, c_31_table3...c_31_table10

哪裏31是其中加入了公司的例子ACCOUNTID?我的假設是,因爲SQL只是垂直增長,否則隨着時間的推移它會變得緩慢,將來每張表約有40k條記錄或更多。所以這種方法會保持數據庫的垂直長度不變,並且水平縮放。

這種技術是一種很好的優化技術嗎?

+0

多租戶是要走的路。請參閱這個鏈接 - > http://www.ibm.com/developerworks/data/library/techarticle/dm-1201dbdesigncloud/有關它的各種方法 –

+0

感謝您的鏈接Magesh,我已經通過它。 – kapilsriram

回答

3

通常不是一個好主意。每種情況都不一樣。有了這個,你不會從查詢緩存中獲益(儘可能多)。您的查詢需要更多的工作(不多)。而存儲的特效,funcs和事件將需要CONCAT s,PREPARE,EXECUTEDEALLOCATE PREPARE

正確的索引和多租戶應該是您的焦點,直到您遇到問題,這可能需要很長時間。我將在此着重於您在開發時的輸出。剖析你的代碼。一直在分析。找出哪些例程很慢並修復它們。

你會與你提出的解決方案魔神家政一塌糊塗。他們不容易清理自己。此外,DDL電話並不便宜,即使有時也是如此。

如果我曾在那突然想命名錶像

c_31_table1, c_31_table2, c_31_table3...c_31_table10 

我將退出的地方。

+1

感謝您的回答。還幫助我找到一些關於SQL的新東西。我會通過它。 – kapilsriram

0

我認爲這種方法是「早期優化」的一種情況。

只需40K行個別「企業,本身不構成任何顯著負荷。你會‘毒’與您的優化效果的應用程序代碼,即使當前負載不會需要它。

也許您需要在公司數量增長時引入一些優化(可能不會超過1000家公司),然後您可以考慮將分區作爲減少「垂直」長度的一種手段。

但保持您的應用程序清潔從這樣的優化,你會在你的應用程序的整個生命週期支付高價格,否則。

另一方面:

允許DDL調用將暴露您可能不想公開的特權。

相關問題