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

來源:互聯網
上載者:User

標籤:blog   http   io   ar   os   使用   sp   strong   資料   

 SQL Server 2005中的分區表(三):將普通錶轉換成分區表分類: SQL Server2009-12-03 17:01 9709人閱讀 評論(6) 收藏 舉報sql serverinserttablenullsql資料庫

    在設計資料庫時,經常沒有考慮到表分區的問題,往往在資料表承重的負擔越來越重時,才會考慮到分區方式,這時,就涉及到如何將普通錶轉換成分區表的問題了。

    那麼,如何將一個普通錶轉換成一個分區表 呢?說到底,只要將該表建立一個叢集索引,並在叢集索引上使用資料分割配置即可。

    不過,這回說起來簡單,做起來就複雜了一點。還是接著上面的例子,我們先使用以下SQL語句將原有的Sale表刪除。

 

[c-sharp] view plaincopy 
  1. --刪除原來的資料表  
  2. drop table Sale  
 

 

    然後使用以下SQL語句建立一個新的普通表,並在這個表裡插入一些資料。

 

[c-sharp] view plaincopy 
  1. --建立一個普通的資料表  
  2. CREATE TABLE Sale(  
  3.     [Id] [int] IDENTITY(1,1) NOT NULL,          --自動成長  
  4.     [Name] [varchar](16) NOT NULL,  
  5.     [SaleTime] [datetime] NOT NULL,  
  6.     CONSTRAINT [PK_Sale] PRIMARY KEY CLUSTERED  --建立主鍵  
  7.     (  
  8.         [Id] ASC  
  9.     )  
  10. )  
  11. --插入一些記錄  
  12. insert Sale ([Name],[SaleTime]) values (‘張三‘,‘2009-1-1‘)    
  13. insert Sale ([Name],[SaleTime]) values (‘李四‘,‘2009-2-1‘)    
  14. insert Sale ([Name],[SaleTime]) values (‘王五‘,‘2009-3-1‘)    
  15. insert Sale ([Name],[SaleTime]) values (‘錢六‘,‘2010-4-1‘)    
  16. insert Sale ([Name],[SaleTime]) values (‘趙七‘,‘2010-5-1‘)    
  17. insert Sale ([Name],[SaleTime]) values (‘張三‘,‘2011-6-1‘)    
  18. insert Sale ([Name],[SaleTime]) values (‘李四‘,‘2011-7-1‘)    
  19. insert Sale ([Name],[SaleTime]) values (‘王五‘,‘2011-8-1‘)    
  20. insert Sale ([Name],[SaleTime]) values (‘錢六‘,‘2012-9-1‘)    
  21. insert Sale ([Name],[SaleTime]) values (‘趙七‘,‘2012-10-1‘)    
  22. insert Sale ([Name],[SaleTime]) values (‘張三‘,‘2012-11-1‘)    
  23. insert Sale ([Name],[SaleTime]) values (‘李四‘,‘2013-12-1‘)    
  24. insert Sale ([Name],[SaleTime]) values (‘王五‘,‘2014-12-1‘)    
 

 

 

    使用以上代碼建立的表是普通表,我們來看一下表的屬性,如所示。

 

    在以上代碼中,我們可以看出,這個表擁有一般普通表的特性——有主鍵,同時這個主鍵還是叢集索引。前面說過,分區表是以某個欄位為分區條件,所以,除了這個欄位以外的其他欄位,是不能建立叢集索引的。因此,要想將普通錶轉換成分區表,就必須要先刪除叢集索引,然後再建立一個新的叢集索引,在該叢集索引中使用資料分割配置。

    可惜的是,在SQL Server中,如果一個欄位既是主鍵又是叢集索引時,並不能僅僅刪除叢集索引。因此,我們只能將整個主鍵刪除,然後重新建立一個主鍵,只是在建立主鍵時,不將其設為叢集索引,如以下代碼所示:

 

[c-sharp] view plaincopy 
  1. --刪掉主鍵  
  2. ALTER TABLE Sale DROP constraint PK_Sale  
  3. --建立主鍵,但不設為叢集索引  
  4. ALTER TABLE Sale ADD CONSTRAINT PK_Sale PRIMARY KEY NONCLUSTERED  
  5. (  
  6.     [ID] ASC  
  7. ) ON [PRIMARY]  
 

 

    在重新非聚集主鍵之後,就可以為表建立一個新的叢集索引,並且在這個叢集索引中使用資料分割配置,如以下代碼所示:

 

[c-sharp] view plaincopy 
  1. --建立一個新的叢集索引,在該叢集索引中使用資料分割配置  
  2. CREATE CLUSTERED INDEX CT_Sale ON Sale([SaleTime])  
  3. ON partschSale([SaleTime])  
 

 

    為表建立了一個使用資料分割配置的叢集索引之後,該表就變成了一個分區表,查看其屬性,如所示。

    我們可以再一次使用以下代碼來看看每個分區表中的記錄數。

 

[c-sharp] view plaincopy 
  1. --統計所有分區表中的記錄總數    
  2. select $PARTITION.partfunSale(SaleTime) as 分區編號,count(id) as 記錄數 from Sale group by $PARTITION.partfunSale(SaleTime)    
 

 

    以上代碼的運行結果如下所示,說明在將普通錶轉換成分區表之後,資料不但沒有丟失,而且還自動地放在了它應在的分區表中了。

 

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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.