1,分割槽作用:將資料分放到多個物理磁碟上,利用並行,多個磁碟同時吞吐以提公升io能力,同時每個分割槽資料量小,也減少了資料的掃瞄,提公升了命中速度。實際上表邏輯上並未拆分,只是分散儲存於不同的物理檔案上,相當於把一張表大資料無限極細化到多張表上,多個驅動上,但是訪問時卻還是一樣的訪問,因為本身並未新建任何表。
注:即使放到一塊磁碟上,因每個分割槽資料量小,掃瞄範圍減少,也能提高速度。
表分割槽方法:1,按時間分割槽:好處,查詢速度快。壞處:因當前資料一直寫到一塊分割槽上,故寫不快。
2,hash分割槽:資料均勻的分散到各分割槽,好處:因當前資料寫到不同分割槽,故寫快。但在查詢方面,要聯合多個分割槽,故查詢不快。
注:分割槽分為硬體與軟體分割槽,此頁是軟體分割槽。硬體分割槽指用磁碟陣列的方式分割槽,硬體負責將資料將到不同磁碟上,查詢與寫入速度都會提高。
操作:指定資料要分割槽的位置-建立檔案組及對應檔案, 資料以何種規則適移到分割槽上-建立分割槽函式, 進行資料遷移。
操作:指定資料要分割槽的位置-建立檔案組及對應檔案, 資料以何種規則適移到分割槽上-建立分割槽函式, 進行資料遷移。
步驟:/*1,指定資料存放位置:增加檔案組,並指定檔案存放位置*/
alter database brm_lvjian
add filegroup [gf_bdorder_50]
alter database brm_lvjian
add filegroup [gf_bdorder_100]
alter database brm_lvjian
add filegroup [gf_bdorder_150]
alter database brm_lvjian
add file ( name = n'gf_bdorder_50',
filename = n'g:\mssql_filegroup\bdorder_50.ndf' , size = 300mb , filegrowth = 10% )
to filegroup [gf_bdorder_50]
alter database brm_lvjian
add file ( name = n'gf_bdorder_100',
filename = n'i:\mssql_filegroup\bdorder_100.ndf' , size = 300mb , filegrowth = 10% )
to filegroup [gf_bdorder_100]
alter database brm_lvjian
add file ( name = n'gf_bdorder_150',
filename = n'i:\mssql_filegroup\bdorder_150.ndf' , size = 300mb , filegrowth = 10% )
to filegroup [gf_bdorder_150]
/*2,指定資料如何存放:建立分割槽函式*/
--left,right指定"="是在最左邊還是右邊
--left: <=1, 1<10<=20, >20
--right: <1,1<=10<20, >=20
create partition function [partitionfunc_bdorder] (int)
as range left for values ('500000','1000000')
select max(id) from bdorder
/*3,資料的遷移,應用分割槽位置與函式,為了方便,將二者合二唯一,提出分割槽架構的概念*/
create partition scheme [partitionscheme_bdorder]
as partition [partitionfunc_bdorder]
to ([primary],gf_bdorder_50,gf_bdorder_100,gf_bdorder_150)
--資料遷移到分割槽
alter table dbo.bdorder drop constraint pk_bdorder
alter table dbo.bdorder add constraint pk_bdorder primary key clustered (id)
on [partitionscheme_bdorder](id)
--恢復成原來的預設狀態,因原來的分割槽架構是primary,故修改表即可,如下:
alter table dbo.bdorder drop constraint pk_bdorder
alter table dbo.bdorder add constraint pk_bdorder primary key clustered (id)
on [primary]
/*查詢*/
--分割槽
select * from sys.partitions where object_id = object_id('dbo.bdorder')
--資料所在分割槽
select $partition.[partitionfunc_bdorder](1000000)
select top 20 id,orderno,orderdate,$partition.[partitionfunc_bdorder](id) from bdorder
order by newid()
--資料分布
select $partition.partitionfunc_bdorder(id) as partition_num,
min(id) as min_value,max(id) as max_value,count(1) as record_num
from dbo.[bdorder]
group by $partition.partitionfunc_bdorder(id)
order by $partition.partitionfunc_bdorder(id)
select * from
sys.partition_range_values
/*若資料量增大,需要增加分割槽,擴大範圍,操作如下*/
操作方法:增加分割槽,增加範圍
alter database [d] add filegroup [gf2]
alter database [wsbook] add file ( name = n'gf2', filename = n'e:\e\e1\dgf2.ndf' , size = 5mb , filegrowth = 10% )
to filegroup [gf2]
為架構新增範圍
alter partition scheme [d_partition_sheme]
next used gf2
這句話就是讓下乙個分割槽使用和現在已經存在的分割槽gf2分割槽中,
2.新增乙個範圍
alter partition function [d_partitionfunc]()
split range ('700000')
可以合併乙個範圍,其實就是刪除分割槽,如merge range(要刪除的原分割槽界點)
alter partition function [d_partitionfunc]() merge range ('400000')
3.查詢分割槽分布
select * from sys.partitions where object_id = object_id('dbo.b')
4.刪除分割槽
drop partition scheme [d_partition_sheme]
drop partition function [d_partitionfunc]
資料切分 MySql表分割槽概述
定義 表的分割槽指根據可以設定為任意大小的規則,跨檔案系統分配單個表的多個部分。實際上,表的不同部分在不同的位置被儲存為單獨的表。使用者所選擇的 實現資料分割的規則被稱為分割槽函式,這在mysql中它可以是模數,或者是簡單的匹配乙個連續的數值區間或數值列表,或者是乙個內部hash函式,或乙個線性ha...
資料切分 MySql表分割槽概述
定義 表的分割槽指根據可以設定為任意大小的規則,跨檔案系統分配單個表的多個部分。實際上,表的不同部分在不同的位置被儲存為單獨的表。使用者所選擇的 實現資料分割的規則被稱為分割槽函式,這在mysql中它可以是模數,或者是簡單的匹配乙個連續的數值區間或數值列表,或者是乙個內部hash函式,或乙個線性ha...
MySQL分割槽表概述
摘要 隨著mysql越來越流行,mysql裡面的儲存的資料也越來越大。在日常的工作中,我們會遇到一張表裡面儲存了上億甚至過十億的記錄。這些表裡面儲存了大量的歷史記錄。對於這些歷史資料的清理是乙個非常頭疼事情,由於所有的資料都乙個普通的表裡。所以只能是啟用乙個或多個帶where條件的delete語句去...