亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQL腳本整理系列一 表分區

系統 2113 0

表分區的目的:

1.把歷史數據放到另外一個表里面 可以提高查詢效率 當然如果經常查詢歷史數據和新數據的合并結果集這樣做就大大的不好了

2.通過把一個表放到不同的文件,不同的文件再存儲到不同的磁盤列陣中,可以提高IO速度?? CPU比硬盤快多了

3.提高可用性,一個磁盤壞了,另外一個磁盤上面的文件還能用 這個對我意義不大

4.便于備份 只需要做一個分區的備份就可以了,比如云服務端,數據量比較大的就4個表單,把這四個表放在一個文件里面這樣每天備份基本不花什么時間,還原也比較方便,這4個表的數據丟了意義也不大, 沒有做測試

?

?? 分區表的定義大體上分為三個步驟:

  1. ??? 定義分區函數
  2. ??? 定義分區構架
  3. ??? 定義分區表 插入測試數據
  4. 【把一個表的數據導入到另外一個表中 這個速度挺快的】

--創建數據庫 這些操作可以在圖形界面完成
--因為在自己電腦上面測試 所以都放在同一個硬盤上面了? http://www.cnblogs.com/CareySon/archive/2011/12/30/2307766.html

          
            CREATE
          
          
            database
          
            Sales 
          
            on
          
          
            primary
          
          
            

(

   name
          
          
            =
          
          N
          
            '
          
          
            Sales
          
          
            '
          
          
            ,

   filename
          
          
            =
          
          N
          
            '
          
          
            G:\data\Primary\Sales.mdf
          
          
            '
          
          
            ,

   size
          
          
            =
          
          
            3MB,

   maxsize
          
          
            =
          
          
            100MB,

   filegrowth
          
          
            =
          
          
            10
          
          
            %
          
          
            

),
          
          
            --
          
          
            創建文件組
          
          
            filegroup FG1

(

  NAME 
          
          
            =
          
           N
          
            '
          
          
            File1
          
          
            '
          
          
            ,   

  FILENAME 
          
          
            =
          
           N
          
            '
          
          
            G:\data\FG1\File1.ndf
          
          
            '
          
          
            ,   

  SIZE 
          
          
            =
          
          
             1MB,   

  MAXSIZE 
          
          
            =
          
          
             100MB,   

  FILEGROWTH 
          
          
            =
          
          
            10
          
          
            %
          
          
             

),
          
          
            --
          
          
            創建文件組
          
          
            FILEGROUP FG2   

(   

  NAME 
          
          
            =
          
           N
          
            '
          
          
            File2
          
          
            '
          
          
            ,   

  FILENAME 
          
          
            =
          
           N
          
            '
          
          
            G:\data\FG2\File2.ndf
          
          
            '
          
          
            ,   

  SIZE 
          
          
            =
          
          
             1MB,   

  MAXSIZE 
          
          
            =
          
          
             100MB,

  FILEGROWTH 
          
          
            =
          
          
            10
          
          
            %
          
          
               

),
          
          
            --
          
          
            創建文件組
          
          
            FILEGROUP FG3   

(   

  NAME 
          
          
            =
          
           N
          
            '
          
          
            File3
          
          
            '
          
          
            ,   

  FILENAME 
          
          
            =
          
           N
          
            '
          
          
            G:\data\FG3\File3.ndf
          
          
            '
          
          
            ,   

  SIZE 
          
          
            =
          
          
             1MB,   

  MAXSIZE 
          
          
            =
          
          
             100MB,   

  FILEGROWTH 
          
          
            =
          
          
            10
          
          
            %
          
          
               

)   


          
          
            LOG
          
          
            ON
          
          
               

(   

  NAME 
          
          
            =
          
           N
          
            '
          
          
            Sales_Log
          
          
            '
          
          
            ,   

  FILENAME 
          
          
            =
          
           N
          
            '
          
          
            G:\data\Primary\Sales_Log.ldf
          
          
            '
          
          
            ,   

  SIZE 
          
          
            =
          
          
             1MB,   

  MAXSIZE 
          
          
            =
          
          
             100MB,   

  FILEGROWTH 
          
          
            =
          
          
            10
          
          
            %
          
          
            

)


          
          
            GO
          
        
View Code

--創建分區函數

        
          USE
        
        
           Sales   


        
        
          GO
        
        
          CREATE
        
         PARTITION 
        
          FUNCTION
        
         pf_OrderDate (
        
          datetime
        
        
          )   


        
        
          AS
        
         RANGE 
        
          RIGHT
        
        
          --
        
        
          以后默認就寫Right 不要記混了 
        
        
          FOR
        
        
          VALUES
        
         (
        
          '
        
        
          2003/01/01
        
        
          '
        
        , 
        
          '
        
        
          2004/01/01
        
        
          '
        
        
          ) 


        
        
          GO
        
      
View Code

--建立分區架構 比如把1900-01-01-'2003/01/01'之間的數據存儲到FG2里面
-- '2003/01/01'- '2004/01/01'之間的數據也存儲到FG2里面
-- '2004/01/01'-? 之間的數據也存儲到FG3里面

        
          --
        
        
          建立分區架構 比如把1900-01-01-'2003/01/01'之間的數據存儲到FG2里面
        
        
          

--
        
        
           '2003/01/01'- '2004/01/01'之間的數據也存儲到FG2里面
        
        
          

--
        
        
           '2004/01/01'-  之間的數據也存儲到FG3里面
        
        
          Use
        
        
           Sales


        
        
          go
        
        
          create
        
        
            partition  scheme ps_OrderDate


        
        
          as
        
        
           partition  pf_OrderDate


        
        
          to
        
        
          (FG2,FG2,FG3)


        
        
          go
        
      
View Code

--建立表

        
          --
        
        
          建立表
        
        
          Use
        
        
           Sales


        
        
          go
        
        
          create
        
        
          table
        
         Orders 
        
          --
        
        
          訂單表
        
        
          (

   OrderID 
        
        
          int
        
        
          identity
        
        (
        
          10000
        
        ,
        
          1
        
        
          ),

   OrderDate 
        
        
          datetime
        
        
          not
        
        
          null
        
        
          ,

   CustomerID 
        
        
          int
        
        
          not
        
        
          null
        
        
          ,

   
        
        
          constraint
        
          PK_Orders 
        
          primary
        
        
          key
        
        
          (OrderID,OrderDate)

)


        
        
          on
        
         ps_OrderDate(OrderDate) 
        
          --
        
        
           這句話決定這個表的不同之處
        
        
          go
        
        
          create
        
        
          table
        
         OrdersHistory 
        
          --
        
        
          訂單歷史表 可以把不常用的數據放到這個表里面 
        
        
          

--
        
        
          這樣對于Orders的查詢就會大大提高 有必要的時候再通過Union All 查詢所有數據
        
        
          (

   OrderID 
        
        
          int
        
        
          identity
        
        (
        
          10000
        
        ,
        
          1
        
        
          ),

   OrderDate 
        
        
          datetime
        
        
          not
        
        
          null
        
        
          ,

   CustomerID 
        
        
          int
        
        
          not
        
        
          null
        
        
          ,

   
        
        
          constraint
        
          PK_OrdersHistory 
        
          primary
        
        
          key
        
        
          (OrderID,OrderDate)

)


        
        
          on
        
        
           ps_OrderDate(OrderDate)


        
        
          go
        
      
View Code

--向表中插入數據

        
          --
        
        
          向表中插入數據
        
        
          USE
        
        
           Sales   


        
        
          GO
        
        
          INSERT
        
        
          INTO
        
         dbo.Orders (OrderDate, CustomerID) 
        
          VALUES
        
         (
        
          '
        
        
          2002/6/25
        
        
          '
        
        , 
        
          1000
        
        
          )   


        
        
          INSERT
        
        
          INTO
        
         dbo.Orders (OrderDate, CustomerID) 
        
          VALUES
        
         (
        
          '
        
        
          2002/8/13
        
        
          '
        
        , 
        
          1000
        
        
          )   


        
        
          INSERT
        
        
          INTO
        
         dbo.Orders (OrderDate, CustomerID) 
        
          VALUES
        
         (
        
          '
        
        
          2002/8/25
        
        
          '
        
        , 
        
          1000
        
        
          )   


        
        
          INSERT
        
        
          INTO
        
         dbo.Orders (OrderDate, CustomerID) 
        
          VALUES
        
         (
        
          '
        
        
          2002/9/23
        
        
          '
        
        , 
        
          1000
        
        
          )


        
        
          GO
        
        
          1000
        
        
          USE
        
        
           Sales   


        
        
          GO
        
        
          INSERT
        
        
          INTO
        
         dbo.Orders (OrderDate, CustomerID) 
        
          VALUES
        
         (
        
          '
        
        
          2003/6/25
        
        
          '
        
        , 
        
          1000
        
        
          )


        
        
          INSERT
        
        
          INTO
        
         dbo.Orders (OrderDate, CustomerID) 
        
          VALUES
        
         (
        
          '
        
        
          2003/8/13
        
        
          '
        
        , 
        
          1000
        
        
          )


        
        
          INSERT
        
        
          INTO
        
         dbo.Orders (OrderDate, CustomerID) 
        
          VALUES
        
         (
        
          '
        
        
          2003/8/25
        
        
          '
        
        , 
        
          1000
        
        
          )


        
        
          INSERT
        
        
          INTO
        
         dbo.Orders (OrderDate, CustomerID) 
        
          VALUES
        
         (
        
          '
        
        
          2003/9/23
        
        
          '
        
        , 
        
          1000
        
        
          )   


        
        
          GO
        
        
          1000
        
        
          GO
        
        
          INSERT
        
        
          INTO
        
         dbo.Orders (OrderDate, CustomerID) 
        
          VALUES
        
         (
        
          '
        
        
          2006/6/25
        
        
          '
        
        , 
        
          1000
        
        
          )


        
        
          INSERT
        
        
          INTO
        
         dbo.Orders (OrderDate, CustomerID) 
        
          VALUES
        
         (
        
          '
        
        
          2007/8/13
        
        
          '
        
        , 
        
          1000
        
        
          )


        
        
          INSERT
        
        
          INTO
        
         dbo.Orders (OrderDate, CustomerID) 
        
          VALUES
        
         (
        
          '
        
        
          2008/8/25
        
        
          '
        
        , 
        
          1000
        
        
          )


        
        
          INSERT
        
        
          INTO
        
         dbo.Orders (OrderDate, CustomerID) 
        
          VALUES
        
         (
        
          '
        
        
          2009/9/23
        
        
          '
        
        , 
        
          1000
        
        
          )   


        
        
          GO
        
        
          11000
        
      
View Code

--查看結果

        
          SELECT
        
        
          *
        
        
          FROM
        
        
           Orders


        
        
          SELECT
        
        
          *
        
        
          FROM
        
        
           dbo.OrdersHistory




        
        
          --
        
        
          查看各個分區的數據行數
        
        
          select
        
         $partition.pf_OrderDate(OrderDate) 
        
          as
        
         Patition,
        
          COUNT
        
        (
        
          *
        
        ) countRow 
        
          from
        
        
           dbo.Orders


        
        
          group
        
        
          by
        
        
           $partition.pf_OrderDate(OrderDate)




        
        
          --
        
        
          檢驗分區函數
        
        
          SELECT
        
          $partition.pf_OrderDate(
        
          '
        
        
          2002
        
        
          '
        
        ) 
        
          AS
        
        
          '
        
        
          所在分區
        
        
          '
        
        
          UNION
        
        
          ALL
        
        
          SELECT
        
          $partition.pf_OrderDate(
        
          '
        
        
          2003
        
        
          '
        
        ) 
        
          AS
        
        
          '
        
        
          所在分區
        
        
          '
        
        
          UNION
        
        
          ALL
        
        
          SELECT
        
          $partition.pf_OrderDate(
        
          '
        
        
          2004
        
        
          '
        
        ) 
        
          AS
        
        
          '
        
        
          所在分區
        
        
          '
        
      
View Code

--把第二部分的數據轉存到歷史表中 把分區移動到不同的表,效率比較高消耗時間比較少

--目標分區只能是空的;必須都存在;

--必須在同一個文件組內,分區號必須相同(是指兩個表公用同一個分區函數的情況下,不共用分區函數就沒有范圍限制了 )

        
          --
        
        
          把第二部分的數據轉存到歷史表中
        
        
          Use
        
        
           Sales


        
        
          go
        
        
          alter
        
        
          table
        
         orders switch partition 
        
          2
        
        
          to
        
         ordersHistory partition 
        
          2
        
        
          go
        
      
View Code

--查看結果

        
          --
        
        
          查看結果
        
        
          SELECT
        
        
          *
        
        
          FROM
        
        
           Orders 


        
        
          SELECT
        
        
          *
        
        
          FROM
        
         dbo.OrdersHistory
      
View Code

?--創建一個新分區

        
          --
        
        
          創建一個新分區 
        
        
          ALTER
        
        
           PARTITION SCHEME ps_OrderDate


        
        
          NEXT
        
        
           USED FG3


        
        
          ALTER
        
         PARTITION 
        
          FUNCTION
        
        
           pf_OrderDate()

SPLIT RANGE ( 
        
        
          '
        
        
          2007/01/01
        
        
          '
        
        
          )


        
        
          --
        
        
          檢查效果
        
        
          INSERT
        
        
          INTO
        
         dbo.Orders (OrderDate, CustomerID) 
        
          VALUES
        
         (
        
          '
        
        
          2009/9/23
        
        
          '
        
        , 
        
          1000
        
        
          )   


        
        
          GO
        
        
          9
        
        
          --
        
        
          查看各個分區的數據行數
        
        
          select
        
         $partition.pf_OrderDate(OrderDate) 
        
          as
        
         Patition,
        
          COUNT
        
        (
        
          *
        
        ) countRow 
        
          from
        
        
           dbo.Orders


        
        
          group
        
        
          by
        
         $partition.pf_OrderDate(OrderDate)
      
View Code

--刪除一個分區

        
          --
        
        
          移除分區 
        
        
          ALTER
        
         PARTITION 
        
          FUNCTION
        
        
           pf_OrderDate()

MERGE RANGE  ( 
        
        
          '
        
        
          2004/01/01
        
        
          '
        
        )
      
View Code

--檢查移除效果

        
          --
        
        
          檢查移除效果 
        
        
          SELECT
        
          $partition.pf_OrderDate(
        
          '
        
        
          2002
        
        
          '
        
        ) 
        
          AS
        
        
          '
        
        
          所在分區
        
        
          '
        
        
          UNION
        
        
          ALL
        
        
          SELECT
        
          $partition.pf_OrderDate(
        
          '
        
        
          2003
        
        
          '
        
        ) 
        
          AS
        
        
          '
        
        
          所在分區
        
        
          '
        
        
          UNION
        
        
          ALL
        
        
          SELECT
        
          $partition.pf_OrderDate(
        
          '
        
        
          2004
        
        
          '
        
        ) 
        
          AS
        
        
          '
        
        
          所在分區
        
        
          '
        
        
          UNION
        
        
          ALL
        
        
          SELECT
        
          $partition.pf_OrderDate(
        
          '
        
        
          2008
        
        
          '
        
        ) 
        
          AS
        
        
          '
        
        
          所在分區
        
        
          '
        
      
View Code

-- 移除分區函數 分區方案

a。刪除源表 再刪除分區函數 分區方案

      
        truncate table name1
        
drop table name1
DROP
PARTITION SCHEME name1 DROP PARTITION FUNCTION name1

b。如果是沒有聚集索引的表

可以通過重新建立索引而不引用分區方案的方式來

?

SQL腳本整理系列一 表分區


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日韩视频一区二区三区 | 色噜噜狠狠色综合免费视频 | 日本欧美高清全视频 | 色婷婷六月桃花综合影院 | 国产精品一区在线播放 | 中国欧美日韩一区二区三区 | 亚洲欧美日韩国产精品久久 | 日韩午夜在线视频不卡片 | 亚洲欧美中文字幕高清在线一 | 精品久久视频 | 婷婷毛片| 成人午夜视频在线播放 | 黄页成人免费网站 | 2019av在线视频 | 美女精品久久久久久国产潘金莲 | 国产欧美日韩在线观看 | 青青青青久久精品国产一百度 | 日韩欧美福利 | 玖玖中文 | 一区二区三区免费在线观看 | 久久国产精品一区 | 欧美亚洲国产成人精品 | 狠狠色噜噜狠狠狠狠97影音先锋 | 国产亚洲女人久久久久久 | 国产乳摇福利视频在线观看 | 亚洲专区欧美 | 99国内视频 | 久久精品23| 四虎影视永久在线 | 久久综合中文字幕 | 欧美毛片性视频区 | 91精品国产福利在线观看性色 | 中文字幕国产综合 | 四虎影永久在线高清免费 | 日日噜噜夜夜狠视频免费 | 99精品在线免费 | 日本色婷婷 | 日韩欧一级毛片在线播无遮挡 | 热久久这里只有 | 久久青草免费97线频观 | 亚洲情区|