日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server 2005中的分区表(四):删除(合并)一个分区

發布時間:2025/3/15 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 2005中的分区表(四):删除(合并)一个分区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在前面我們介紹過如何創建和使用一個分區表,并舉了一個例子,將不 同年份的數據放在不同的物理分區表里。具體的分區方式為:

?? ?第1個小表:2010-1-1以前的數據(不包含2010-1-1)。

?? ?第2個小表:2010-1-1(包含2010-1-1)到2010-12-31之間的數據。

?? ?第3個小表:2011-1-1(包含2011-1-1)到2011-12-31之間的數據。

?? ?第4個小表:2012-1-1(包含2012-1-1)到2012-12-31之間的數據。

?? ?第5個小表:2013-1-1(包含2013-1-1)之后的數據。

?? ?分區函數的代碼如下所示:

[c-sharp] view plaincopyprint?
  • CREATE?PARTITION?FUNCTION?partfunSale?(datetime)??AS?RANGE?RIGHT?FOR?VALUES?('20100101','20110101','20120101','20130101')????
  • CREATE PARTITION FUNCTION partfunSale (datetime) AS RANGE RIGHT FOR VALUES ('20100101','20110101','20120101','20130101') ?

    ?

    ?

    ?? ?假設我們在創建分區表之后發現,2010年以前的數據并不多,完全可以將它們與2010年的數據進行合并,放在同一個分區里,也就是說,具體的分區方式改為:

    ?

    ?? ?第1個小表:2011-1-1以前的數據(不包含2011-1-1)。

    ?? ?第2個小表:2011-1-1(包含2011-1-1)到2011-12-31之間的數據。

    ?? ?第3個小表:2012-1-1(包含2012-1-1)到2012-12-31之間的數據。

    ?? ?第4個小表:2013-1-1(包含2013-1-1)之后的數據。

    ?

    ?

    ?? ?由于上面的需求更改了數據分區的條件,因此,我們必須要修改分區函數,因為分區函數的作用就是要來告訴SQL Server怎么存放數據的。只要分區函數修改了,SQL Server會自動將數據重新分配,按照新的分區函數指定的方式來存儲數據。

    ?? ?先假設我們還沒有創建過分區表,要滿足上面的條件,我們必須要寫出如下代碼的創建分區函數的SQL語句

    [c-sharp] view plaincopyprint?
  • CREATE?PARTITION?FUNCTION?partfunSale?(datetime)????
  • AS?RANGE?RIGHT?FOR?VALUES?('20110101','20120101','20130101')???
  • CREATE PARTITION FUNCTION partfunSale (datetime) AS RANGE RIGHT FOR VALUES ('20110101','20120101','20130101') ?

    ?

    ?? ?比較一個新的分區函數和老的分區函數,看看他們有什么區別?

    ?? ?的確,我們很容易就可以發現,老的分區函數里多了一個分界值——也就是'20100101'。那么,修改老的分區函數,事實上就是將這分界值刪除。簡單一點說,刪除(合并)一個分區,事實上就是在分區函數中將多余的分界值刪除。

    ?

    ?? ?刪除分區函數中的分界值,也就是修改分區函數的方法如下所示:

    [c-sharp] view plaincopyprint?
  • ALTER?PARTITION?FUNCTION?partfunSale()??
  • ????MERGE?RANGE?('20100101')??
  • ALTER PARTITION FUNCTION partfunSale() MERGE RANGE ('20100101')?

    ?

    ?? ?其中:

    ?? ?1、ALTER PARTITION FUNCTION 意思是修改分區函數

    ?? ?2、partfunSale()為分區函數名

    ?? ?3、MERGE RANGE意思是合并界限。事實上,合并界限和刪除分界值是一個意思。

    ?

    ?? ?我們可以在修改分區函數時先統計一下各物理分區中的記錄總數,在修改分區之后,再統計一下各物理分區中的記錄總數,看一下修改分區函數后的數據變化情況,代碼如下所示:

    [c-sharp] view plaincopyprint?
  • --統計所有分區表中的記錄總數??????
  • select?$PARTITION.partfunSale(SaleTime)?as?分區編號,count(id)?as?記錄數?from?Sale?group?by?$PARTITION.partfunSale(SaleTime)??
  • --原來的分區函數是將2010-1-1之前的數據放在第1個分區表中,將2010-1-1至2011-1-1之間的數據放在第2個分區表中??
  • --現在需要將2011-1-1之前的數據都放在第1個分區表中,也就是將第1個分區表和第2個分區表中的數據合并??
  • --修改分區函數??
  • ALTER?PARTITION?FUNCTION?partfunSale()??
  • ????MERGE?RANGE?('20100101')??
  • --統計所有分區表中的記錄總數??????
  • select?$PARTITION.partfunSale(SaleTime)?as?分區編號,count(id)?as?記錄數?from?Sale?group?by?$PARTITION.partfunSale(SaleTime)??
  • --統計所有分區表中的記錄總數 select $PARTITION.partfunSale(SaleTime) as 分區編號,count(id) as 記錄數 from Sale group by $PARTITION.partfunSale(SaleTime) --原來的分區函數是將2010-1-1之前的數據放在第1個分區表中,將2010-1-1至2011-1-1之間的數據放在第2個分區表中 --現在需要將2011-1-1之前的數據都放在第1個分區表中,也就是將第1個分區表和第2個分區表中的數據合并 --修改分區函數 ALTER PARTITION FUNCTION partfunSale() MERGE RANGE ('20100101') --統計所有分區表中的記錄總數 select $PARTITION.partfunSale(SaleTime) as 分區編號,count(id) as 記錄數 from Sale group by $PARTITION.partfunSale(SaleTime)?

    ?

    ?? ?運行結果如下圖所示:

    ?

    ?? ?現在還有一個問題,就是通過修改分區函數合并數據之后,數據都存放在哪里了?在修改之前,數據分別存放在文件組Sale2009和Sale2010中,修改之后,數據放到哪里去了呢?

    ?? ?事實上,在修改分區函數之后,SQL Server也會自動修改分區方案,將處于兩個物理分區中的數據放在同一個物理分區里了。可以通過查看分區方案的方式來查看數據具體的存放位置。

    ?? ?查看分區方案的方式為:在SQL Server Management Studio中,選擇數據庫-->存儲-->分區方案,右擊分區方案名,在彈出的菜單中選擇“編寫分區方案腳本為”-->CREATE到-->新查詢編輯器窗口

    ?? ?然后在新查詢編輯器窗口可以看到下圖代碼。

    ?? ?從上圖中可以看出,分區方案將原來Sale2010文件組中的數據合并到了Sale2009文件組中。

    ?

    ?

    原創不容易,轉載請注明出處。http://blog.csdn.net/smallfools/archive/2009/12/04/4937878.aspx

    相關鏈接:

    SQL Server 2005中的分區表(一):什么是分區表?為什么要用分區表?如何創建分區表?

    SQL Server 2005中的分區表(二):如何添加、查詢、修改分區表中的數據

    SQL Server 2005中的分區表(三):將普通表轉換成分區表?

    SQL Server 2005中的分區表(四):刪除(合并)一個分區

    SQL Server 2005中的分區表(五):添加一個分區

    SQL Server 2005中的分區表(六):將已分區表轉換成普通表

    轉載于:https://www.cnblogs.com/alianhot/archive/2012/03/21/2409243.html

    總結

    以上是生活随笔為你收集整理的SQL Server 2005中的分区表(四):删除(合并)一个分区的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。