隨著業(yè)務的不斷擴大垫竞,原始設計的單表單庫已經(jīng)不能滿足實際業(yè)務場景咒钟,并發(fā)量大的時候數(shù)據(jù)庫I/O已經(jīng)開始排隊了,這時需要著手于數(shù)據(jù)庫優(yōu)化凯亮。這樣的業(yè)務場景單純增加索引已經(jīng)不足夠應付業(yè)務了辐真,這個時候我們就要開始考慮SQL SERVER的表分區(qū)(Partition)了须尚。
表分區(qū)是一項需要長期維護周期變更的操作,分區(qū)的意義在于將大數(shù)據(jù)從物理上切割成幾個互相獨立的小部分侍咱,這樣我們在查詢的時候只取出其中一個或者幾個分區(qū)耐床,減少查找的數(shù)據(jù)量。對于不同文件組的分區(qū)楔脯,并行查詢的性能要高于對整個表的查詢性能撩轰。下面介紹詳細操作。
分區(qū)列
在管理器中昧廷,找到需要分區(qū)的表钧敞,右鍵 ——>儲存——>創(chuàng)建分區(qū),會彈出如下窗口:
要注意向導中說到的麸粮,可以創(chuàng)建用于對表進行分區(qū)的腳本溉苛,可以立即運行該腳本,或者為表分區(qū)安排作業(yè)弄诲。我第一次嘗試的時候把腳本保存下來就以為會自動執(zhí)行愚战,傻傻的不知道等了多久(:手動狗頭
點擊下一步后如下圖所示,需要選擇一項分區(qū)列齐遵,這里會列出包括列名寂玲、數(shù)據(jù)類型、長度梗摇、精度拓哟、刻度的信息,我們可以根據(jù)業(yè)務去選擇合適的列區(qū)作為分區(qū)列伶授。而以下類型的列不可用于分區(qū):text断序、ntext、image糜烹、xml违诗、timestamp、varchar(max)疮蹦、nvarchar(max)诸迟、varbinary(max)、別名、hierarchyid阵苇、空間索引或 CLR 用戶定義的數(shù)據(jù)類型壁公。此外,如果使用計算列作為分區(qū)列绅项,則必須將該列設為持久化列(Persisit)贮尖。如圖測試表我們選擇時間為分區(qū)列。下邊有兩個選項:
- 將此表與選定的分區(qū)表并置
此處是要求在同一數(shù)據(jù)庫下有另一張已經(jīng)分好區(qū)的表趁怔,同時這張表的分區(qū)列和當前選中的列的類型完全一致湿硝。 -
將存儲區(qū)中的所有非唯一和唯一索引與索引分區(qū)列對齊
這樣會將表中的所有索引也一同分區(qū),實現(xiàn)“對齊”润努。
分區(qū)函數(shù)與分區(qū)方案
在之前的一步選好分區(qū)列之后关斜,如果沒有選擇“將此表與選定的分區(qū)表并置”選項,接下來就會進入選擇創(chuàng)建分區(qū)函數(shù)以及分區(qū)方案的界面铺浇,分區(qū)函數(shù)需要指定分區(qū)邊界痢畜,分區(qū)方案是規(guī)劃了文件組。
左邊界是指每個分區(qū)的邊界值被包含在邊界值左側的分區(qū)鳍侣,也就是每個分區(qū)內的數(shù)據(jù)約束是<=指定的邊界值丁稀,所以,右邊界指的就是每個分區(qū)的邊界值被包含在邊界值右側的分區(qū)中倚聚,每個分區(qū)內的數(shù)據(jù)約束是<指定的邊界值线衫。
有一個需要注意的地方是,在最后一個分區(qū)是沒有制定邊界的惑折,用于保存所有>左邊界或<=右邊界最后一個分區(qū)邊界的數(shù)據(jù)授账,截圖還沒給設置文件組,這個是一定需要設置的惨驶。之后點擊下一步如下圖所示白热,
這個可以自己選擇。
接下來更詳細的有時間再更新吧~~~
想寫一些東西分享粗卜,歡迎轉載屋确,請注明出處。
簡書-板凳兒兒
http://www.reibang.com/p/eaa44dea7bfb