中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

知方可補不足~SQL為(wei)大數據(ju)引入分區表

回到目錄

一些概念

分區(qu)表在(zai)oracle和(he)sqlserver中都上(shang)存在(zai)的(de)(de)(de)(de)(de),當數據(ju)表的(de)(de)(de)(de)(de)數據(ju)量過大(da)時,上(shang)千萬,上(shang)億的(de)(de)(de)(de)(de)數據(ju),在(zai)進(jin)行(xing)數據(ju)查詢時需要顯得比較慢,性能很差,這(zhe)時是(shi)時候引入(ru)分區(qu)表了,分區(qu)表顧名思義,就(jiu)是(shi)把物(wu)理表用一些文件(jian)NDF進(jin)行(xing)分塊存儲,以緩減IO的(de)(de)(de)(de)(de)壓力(li),因為當你(ni)的(de)(de)(de)(de)(de)SQL文件(jian)過大(da)的(de)(de)(de)(de)(de),這(zhe)其(qi)實對系統的(de)(de)(de)(de)(de)IO影響是(shi)最大(da)的(de)(de)(de)(de)(de),這(zhe)種分區(qu)表我(wo)感(gan)覺類似于數據(ju)的(de)(de)(de)(de)(de)分片(pian)(mongodb),它(ta)將有效的(de)(de)(de)(de)(de)利(li)用服(fu)務器的(de)(de)(de)(de)(de)CPU多核資(zi)源(yuan),并行(xing)去處理你(ni)的(de)(de)(de)(de)(de)請求,所以在(zai)大(da)數據(ju)情況下(xia),分區(qu)表是(shi)很好(hao)的(de)(de)(de)(de)(de)一種選(xuan)擇(ze)!

我們通常(chang)也把電腦的磁盤分成若干(gan)的區,其中一種(zhong)考慮也是為了性能,安(an)全等

sql的分(fen)區表于(yu)若干的文(wen)(wen)件(jian)(jian)組組成(cheng),它們可以被(bei)理(li)解成(cheng)依(yi)照某個條件(jian)(jian)(分(fen)區函數)來進行劃(hua)分(fen)的文(wen)(wen)件(jian)(jian)塊(kuai),當(dang)你(ni)進行curd操(cao)作時,SQL會把(ba)它同時響應到對應的塊(kuai)上(shang)去,文(wen)(wen)件(jian)(jian)組里至(zhi)少包(bao)含(han)一個文(wen)(wen)件(jian)(jian),當(dang)然(ran)可以是(shi)多個,它們也可以在不同的磁盤上(shang)。

說干就干

下面來一(yi)(yi)步(bu)一(yi)(yi)步(bu)的實現(xian)一(yi)(yi)下分區表的建立邏輯

--建立(li)兩個文件組
ALTER DATABASE Test ADD FILEGROUP BEFORE2000
ALTER DATABASE Test ADD FILEGROUP AFTER2000
ALTER DATABASE Test ADD FILEGROUP AFTER2010

--創建文(wen)件
ALTER DATABASE Test ADD FILE
(Name=N'Before2000',filename='c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Before2000.ndf',size=5mb,maxsize=100Mb,filegrowth=5mb) 
TO FILEGROUP Before2000
ALTER DATABASE Test ADD FILE
(Name=N'After2000',filename='c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\After2000.ndf',size=5mb,maxsize=100Mb,filegrowth=5mb) 
TO FILEGROUP After2000
ALTER DATABASE Test ADD FILE
(Name=N'After2010',filename='c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\After2010.ndf',size=5mb,maxsize=100Mb,filegrowth=5mb) 
TO FILEGROUP After2010

上面代碼在磁盤(pan)上建立了(le)兩(liang)個文件(jian)(jian)(jian)組,用來存儲2000年以(yi)前(qian),2000-2010年,以(yi)2010年以(yi)后(hou)的數據,而ndf是分區表文件(jian)(jian)(jian)的類(lei)型,一(yi)個分區表文件(jian)(jian)(jian)組可以(yi)由多個ndf文件(jian)(jian)(jian)構成

--編寫(xie)分區函數
CREATE PARTITION FUNCTION RangeTime (DATETIME) AS RANGE LEFT FOR VALUES ('2000-01-01','2010-01-01')
--編寫分區(qu)方案,  分區(qu)方案也就是將分區(qu)函數與(yu)文件組進行一個關聯
CREATE PARTITION SCHEME RangeSchema_CreateTime
AS PARTITION RangeTime
TO (BEFORE2000,AFTER2000,AFTER2010)

上面分(fen)(fen)區函數(shu)說明(ming)以(yi)哪(na)里依據(ju)進(jin)行分(fen)(fen)區,而(er)分(fen)(fen)區方(fang)案是將它與(yu)分(fen)(fen)區文件(jian)組進(jin)行接(jie)合(he),或(huo)者和(he)數(shu)據(ju)表進(jin)行打通(tong),以(yi)后我們用(yong)的時候,直接(jie)用(yong)分(fen)(fen)區函數(shu)(表名(ming))即可(ke)。

--創建分(fen)區(qu)表,先建表,再設主(zhu)鍵(jian),否則會出錯(cuo)
CREATE TABLE Order
    (
      ID VARCHAR(50) ,
      UserId VARCHAR(50) ,
      CreateTime DATETIME
    )
ON  RangeSchema_CreateTime(CreateTime)

上面(mian)代碼建(jian)(jian)立(li)一(yi)(yi)張表,并進行分(fen)區的配置(zhi),注意,在建(jian)(jian)立(li)表后,再建(jian)(jian)立(li)主鍵,我們填充一(yi)(yi)些數據(ju)就可(ke)以測試了,下面(mian)介紹(shao)幾個(ge)常用的命令 

返(fan)回(hui)2001-2-2日這條(tiao)數據會被分配到哪個(ge)分區了

--測試(shi)某(mou)個對象放在哪個分區(qu)里
SELECT  $PARTITION.RangeTime('2001-2-2')

查看指定分區內的數據

--查看某(mou)個分區表(biao)里(li)存放的數(shu)據(ju)
SELECT  *
FROM    shop
WHERE   $PARTITION.RangeTime(CreateTime) = 1

查看某個分區里,記錄的個數

--查(cha)看某(mou)個分區表的個數
SELECT  $PARTITION.RangeTime(CreateTime) AS 分區編號 ,
        COUNT(id) AS 記錄數
FROM    shop
GROUP BY $PARTITION.RangeTime(CreateTime)  

當(dang)數(shu)(shu)據量達到一定(ding)指數(shu)(shu)時,我們(men)必須要進(jin)行調整,而(er)選擇(ze)哪種方法(fa)是靠技(ji)術決策人(ren)的(de),我們(men)每個開發(fa)人(ren)員都應該把自(zi)(zi)己(ji)(ji)當(dang)成是技(ji)術的(de)決策人(ren),對(dui)自(zi)(zi)己(ji)(ji)的(de)代碼和自(zi)(zi)己(ji)(ji)的(de)人(ren)生(sheng)負責!

感謝您的閱讀!

回到目錄

 

posted @ 2016-02-24 14:05  張占嶺  閱讀(1068)  評論(0)    收藏  舉報