2015-06-03 95 views
0

假設我們有一個巨大的表,我們運行非常複雜的查詢。表分區與多個表

說這是一個客戶關係管理,我們有一個表叫做人[ID(GUID),listId(GUID),姓名,電子郵件,城市,......]

它會更好,以表示此按用戶如此多張表:

People_<USER_ID>,如果我們有100個用戶,我們有100個這樣的表

或者像上面與我們劃分在user_id列

一個表?

謝謝

+0

「巨​​大」有多大?你多久更新一次表格(插入/更新/刪除)?你多久添加一次「用戶」? –

+0

每天少於100個用戶。 巨大的數據量爲1億,所以在表中執行的查詢時數量並不是很大,但卻非常複雜。假設這些方法不能被進一步簡化 – user2624034

回答

0

每種方法都有其優點和缺點。例如,如果使用單獨的表,則可以對每個表執行維護,例如重建索引或統計信息,如果添加新用戶,則創建新表非常簡單,而不是修改分區函數。

使用分區表,查詢將大大簡化,因爲您不會依賴每個表的UNION查詢。

中途地面是使用分區視圖;即建立一個視圖,該視圖具有聯合在一起的各個表的定義。這提供了分區表的一些優點,但如果添加新表並使用100個表,則視圖定義將需要維護,這將非常不便。

分區表通常最適用於數據倉庫類環境,您可以在其中創建一個裝載表,並將其添加爲每個數據負載的新分區。在這種環境下,通常只有在定義的時間將數據寫入一個分區,並在其餘時間從所有分區讀取數據。

如果您的數據量非常大,那麼就執行維護任務所需的時間而言,如果只需要一個或多個分區,分區可能會帶來一些好處。但是,最好找到適應此的分區功能。例如,如果您的行只寫入一次而沒有更新,那麼添加一個創建的日期時間並對其進行分區,或者使用遞增的主鍵和分區來表示您將只需要重新索引活動分區。

+0

我還補充說,這兩種方法都會顯着提高查詢時間,其中的行落入一個分區/表中。但是,在只有一部分數據是「活動」的情況下,分區是最有用的,並且通過它的聲音,您將讀取/寫入所有分區。在多個表格上使用分區可能不會給您帶來任何好處,除了整潔以及能夠在不損壞滾動條的情況下查看SSMS中的所有表格。 –

+0

讓我澄清,因爲我以前不是很清楚。我一次只能從一個用戶分區讀取數據 - 對於一個用戶也是如此。所以我永遠不會結束聯盟和奇怪的情況(現在我想不出來),那麼就這樣吧。 – user2624034

+0

當您只是一般地寫入/更新一個分區時,分區是最有用的,而所有其他分區都是靜態的並且基本上是隻讀的。分區的真正優勢在於分區可以輕鬆進入和退出,只需要對錶進行簡短的模式鎖定即可。相比之下,重建索引視圖時,其定義更改可能會很慢,並且需要在內存中/磁盤上佔用大量空間。如果你不打算這樣做,你將不會獲得這個優勢。 –