SQL Server数据库分区分表
當一個數據表的數據量達到千萬級別以后,每次查詢都需要消耗大量的時間,所以當表數據量達到一定量級后我們需要對數據表水平切割。水平分區分表就是把邏輯上的一個表,在物理上按照你指定的規則分放到不同的文件里,把一個大的數據文件拆分為多個小文件,還可以把這些小文件放在不同的磁盤下。這樣把一個大的文件拆分成多個小文件,便于我們對數據的管理。
下面我們來創建表分區
代碼創建分區表
添加文件組
代碼格式:
ALTER DATABASE <數據庫名稱> ADD FILEGROUP<文件組名>代碼示例:
ALTER DATABASE TestDb ADD FILEGROUP TestDbFileGroup添加文件
代碼格式:
ALTER DATABASE<數據庫名稱>ADD FILE <數據標識> TO FILEGROUP<文件組名稱>
注意:數據標識中name為邏輯文件名、filename為物理文件路徑名、size為文件初始大小(單位:kb/mb/gb/tb)、filegrowth為文件自動增量(單位:kb/mb/gb/tb)、maxsize為文件增大的最大大小(單位:kb/mb/gb/tb/unlimited)
代碼示例:
定義分區函數
?分區函數是用于判定數據行該屬于哪個分區,通過分區函數中設置邊界值來使得根據行中特定列的值來確定其分區。
代碼格式:
其中“LEFT”和“RIGHT”決定了“VALUES”中的邊界值被劃分到哪一個分區中(即,邊界值屬于左側分區還是右側分區)。
代碼示例:
查看分區函數是否創建成功:
定義分區架構
定義完分區函數僅僅是知道了如何將列的值區分到了不同的分區,而每個分區的存儲方式,則需要分區構架來定義。分區構架僅僅是依賴分區函數.分區構架中負責分配每個區屬于哪個文件組,而分區函數是決定如何在邏輯上分區。
代碼格式:
代碼示例:
查看分區架構是否創建完成:
定義分區表
表在創建的時候就已經決定是否是分區表了。雖然在很多情況下都是你在發現已經表已經足夠大的時候才想到要把表分區,但是分區表只能夠在創建的時候指定為分區表。
代碼格式:
?
代碼示例:
CREATE TABLE dt(id BIGINT,date datetime2(0),desc varchar(50) ) ON TestPartitionScheme(date)界面向導表分區
創建文件組
右鍵數據庫,選擇“屬性”
?
在屬性界面中,點擊箭頭所示的“文件組”選項,進入文件組編輯界面
在文件組管理界面中點擊箭頭①所示的“添加”選項,添加新的文件組,界面中會出現箭頭②所示的屬性框,并鍵入對應的屬性值,之后點擊“確定”,完成新建文件組。
添加文件
和添加文件組的方式一樣,右鍵數據庫,選擇“屬性”,打開數據庫屬性界面,這次選擇“文件”,打開文件管理界面
在文件管理界面中,點擊箭頭①所示的“添加”選項,添加新的文件,在新添加的箭頭②所示的區域,根據實際需求,填寫對應的文件屬性值,填寫完成后點擊“確定”。其中,一個文件組中可以添加多個文件,即“文件組”屬性的值是可以重復的。
定義分區表
在SQL Server 2012 Management Studio的界面中,找到目標數據庫下的“表”菜單,右鍵點擊,選擇“新建數據庫表”,打開新建數據庫表界面,新建一個分區表。
添加分區函數和分區架構
完成新建分區表后,我們就可以在分區表上添加分區函數和分區架構了。右鍵點擊分區表,選擇“存儲”,然后選擇“創建分區”,開始添加分區函數和分區架構
點擊“下一步”
選擇分區列
?
填寫分區函數
?
填寫分區架構
?
指定文件組
按照圖示箭頭步驟,一步步設置文件組參數。首先選擇分區邊界值劃分在左邊界分區還是右邊界分區,然后進行第二步,設置分區所屬文件組,再設置分區邊界值(該值要與分區表的分區字段類型對應),最后點擊“預計存儲空間(E)”對其他參數進行自動填充。設置完成后點擊“下一步”
腳本設置
根據實際需求完成最后的設置(一般不做設置),然后點擊“完成”,在下一個界面中再次點擊“完成”,然后等待數據庫執行操作,最后關閉界面。
分區完成后,右鍵點擊分區表,選擇“屬性”,然后選擇“存儲”
表分區查看
在已分區的表上創建索引(分區索引)時,應該注意以下事項:
l ?唯一索引
建立唯一索引(聚集或者非聚集)時,分區列必須出現在索引列中。此限制將使SQL Server只調查單個分區,并確保表中寵物的新鍵值。如果分區依據列不可能包含在唯一鍵中,則必須使用DML觸發器,而不是強制實現唯一性。
l ?非唯一索引
對非唯一的聚集索引進行分區時,如果未在聚集鍵中明確指定分區依據列,默認情況下SQL Server 將在聚集索引列中添加分區依據列。
對非唯一的非聚集索引進行分區時,默認情況下SQL Server 將分區依據列添加為索引的包含性列,以確保索引與基表對齊,若果索引中已經存在分區依據列,SQL Server 將不會像索引中添加分區依據列。
?
表分區的優點:
1、改善查詢性能:對分區對象的查詢可以僅搜索自己關心的分區,提高檢索速度。?
2、增強可用性:如果表的某個分區出現故障,表在其他分區的數據仍然可用;?
3、維護方便:如果表的某個分區出現故障,需要修復數據,只修復該分區即可;?
4、均衡I/O:可以把不同的分區映射到磁盤以平衡I/O,改善整個系統性能。
表分區的缺點:
已經存在的表沒有方法可以直接轉化為分區表
什么時候使用分區表:?
1、表的大小超過2GB。?
2、表中包含歷史數據,新的數據被增加都新的分區中。?
?
總結
以上是生活随笔為你收集整理的SQL Server数据库分区分表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CARP 使用笔记
- 下一篇: linux cmake编译源码,linu