數據庫Sql server 表分區

首先明確表分區和分庫分表的概念。

  • 表分區:在不破壞原本表結構的基礎上,對單個大表進行切割,分成不同文件,存儲在不用文件或硬盤。
  • 分庫分表:這裏涉及到垂直切分及水平切分(引用網上的文章:https://www.cnblogs.com/zr520/p/5449748.html)。

        垂直切分:垂直拆分就是要把表按模塊劃分到不同數據庫表中(當然原則還是不破壞第三範式),這種拆分在大型網站的演變過程中是很常見的。當一個網站還在很小的時候,只有小量的人來開發和維護,各模塊和表都在一起,當網站不斷豐富和壯大的時候,也會變成多個子系統來支撐,這時就有按模塊和功能把表劃分出來的需求。其實,相對於垂直切分更進一步的是服務化改造,說得簡單就是要把原來強耦合的系統拆分成多個弱耦合的服務,通過服務間的調用來滿足業務需求看,因此表拆出來後要通過服務的形式暴露出去,而不是直接調用不同模塊的表,淘寶在架構不斷演變過程,最重要的一環就是服務化改造,把用戶、交易、店鋪、寶貝這些核心的概念抽取成獨立的服務,也非常有利於進行局部的優化和治理,保障核心模塊的穩定性。

        水平切分:上面談到垂直切分只是把表按模塊劃分到不同數據庫,但沒有解決單表大數據量的問題,而水平切分就是要把一個表按照某種規則把數據劃分到不同表或數據庫裏。例如像計費系統,通過按時間來劃分表就比較合適,因爲系統都是處理某一時間段的數據。而像SaaS應用,通過按用戶維度來劃分數據比較合適,因爲用戶與用戶之間的隔離的,一般不存在處理多個用戶數據的情況,簡單的按user_id範圍來水平切分

這裏我們指討論表分區。

1.首先明確系統中對此表的查詢情況

如果系統比較複雜可以藉助“SQL Server Profiler”對生產環境進行抓取。並分析此表的查詢情況,比如:如果是行業類型的新聞,可能以行業來查詢的情況比較多,筆者之前維護過一個系統,屬於行業資訊類,單表大概幾百萬,對行業ID建立索引後,列表頁查詢(Row_number)大概在200ms左右。利用行業ID進行表分區後,穩定表現在50ms左右。因爲sqlserver優化器會根據表分區的函數定位到該分區,不對其他分區進行查詢,所以提高比較明顯。總的來說就是先判斷要以哪個字段作爲分區依據。

如果存在多個可進行分區的字段,那麼如果他們之間是有關聯的,比如:類別1,類別1的2級類別,類別1的3級類別,但是又是有互相關係的,可以對基礎字段進行分區,及類別1。如果需要查詢“類別1的2級類別”,可以把類別1加上,這樣依然會定位對應的分區從而提高速度。

2.創建文件組

  • 一種利用sqlserver的管理器進行創建:

  • 利用命令進行創建,
alter database <數據庫名> add filegroup <文件組名>

如果打算分10區就得添加10個文件組。

3.創建文件(真實的文件名)

alter database <數據庫名稱> add file <數據標識> to filegroup <文件組名稱>

--<數據標識> (name:文件名,fliename:物理路徑文件名,size:文件初始大小kb/mb/gb/tb,filegrowth:文件自動增量kb/mb/gb/tb/%,maxsize:文件可以增加到的最大大小kb/mb/gb/tb/unlimited)

4.創建表分區

在這裏設置分區的項目,PRIMARY則是默認的DB文件。一般先存儲到分區,最後剩下的數據存儲在PRIMARY。完成後生成腳本。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章