天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

Sql Server性能優化——Partition(管理分區)

  在企業管理器中,雖然有“管理分區”的菜單,里面的內容卻可能與你的預想不同,這里并沒有提供直接對分區進行操作的方法,所以一些普通的操作,比如“增加分區”、“刪除分區”之類的操作就需要通過腳本實現了。

  增加分區(Split Partition)

  “增加分區”事實上就是將現有的分區分割開,基于此,在SQL Server中應用的是Split操作。在分離分區的時候,不僅僅要在Partition Function上指定分割的分界點,同樣需要在Partition Scheme上指定新分區應用的文件組:

--指定下一個分區應用文件組PRIMARY
ALTER PARTITION SCHEME [MyPartitionSchema]
NEXT USED [PRIMARY]
--指定分區分界點為5000
ALTER PARTITION FUNCTION MyPartitionFunction()
SPLIT RANGE (5000)

  需要注意的一點是,新增的分區中非聚簇索引的壓縮模式會被置為None。

  刪除分區(Merge Partition)

  “刪除分區”同樣可以認為是將原來分離的分區合并在一起,所以對應的是Merge操作,而且由于并沒有新增的分區,Partition Scheme并不需要改變:

ALTER PARTITION FUNCTION MyPartitionFunction ()
MERGE RANGE (5000)

  切換分區(Switch Partition)

  “切換分區”可能是一個比看上去會應用的更頻繁的操作,它的意義在于將一個分區的數據從一張表切換到另一張表中。這里定義被切換分區的表為“源表”,被切換到的表為“目標表”,則執行切換操作的前提是:

  1. 源表和目標表擁有同樣的表結構,即同樣的字段、字段類型,同樣的索引結構(聚簇和非聚簇),同樣的壓縮格式。但不要求默認值約束一致(Default Constaint),也不要求目標表設置了和源表一樣的自增長列。
  2. 源表如果有索引且分區,則其索引必須對齊。
  3. 源表中被切換的分區范圍必須包含于目標表或者目標表將要被切換到的分區范圍。這里有如下幾種情況:
    1. 將源表的源分區切換到目標表的目標分區中,則目標分區范圍>=源分區;
    2. 將源表的源分區切換到目標表中(目標表未分區),則目標表沒有設約束,或約束范圍>=源分區;
    3. 將源表切換到目標表中(源表、目標表都未分區),則只要目標表沒有設約束就可以了(雖然Switch是分區提出的操作,但一個沒有分區的表同樣可以被看做一個大分區,所以可以對沒有分區的表進行Switch操作)。
  4. 目標表或目標分區不能含有數據。

  下面的操作將源表的第二個分區切換到目標表的第二個分區中。

ALTER TABLE [STable] SWITCH PARTITION 2 TO [DTable] PARTITION 2

  分區管理操作的性能

  分割、合并以及切換分區是元數據上的操作而不是對數據的移動,所以操作的效率要比直接操作數據高很多。

  1. 對于分割分區,操作時間和被分割分區的數據量相關,數據越大則分割花費的時間會越長。
  2. 對于合并分區,如果將兩個空的分區合并,自然不會耗什么時間;如果兩個分區都有數據,則和分割分區一樣,數據越大花費的時間越長;如果兩個分區中有一個沒有數據,筆者的經驗是如果有大數據量的分區在右(>分界值),則消耗的時間較短,如果有大數據量的分區在左(<分界值),則會消耗較多的時間。
  3. 對于切換分區,即使是上千萬級別的數據,也可以在不到1秒的時間完成分區的切換。所以雖然從表面上看,切換分區和調用Select或者Insert語句移動數據的結果是一樣的,但效率卻是不可同日而語的。

  查看分區信息

  除了利用上文提到的通過“管理壓縮”的方式查看某張表的分區信息之外,SQL Server還提供了一張系統表查看數據庫中的分區情況:

  1. SYS.PARTITION_SCHEMES,數據庫中所有分區方案的信息,包括對應的分區函數的ID。
  2. SYS.PARTITION_FUNCTIONS,數據庫中所有分區函數的信息,包括分區數等信息。
  3. SYS.PARTITION_RANGE_VALUES,每個分區范圍的信息,可以和SYS.PARTITION_FUNCTIONS聯查。

  比如可以通過如下的腳本,查出分區函數MyPartitionFunc的第一個分區的右邊界:

SELECT value FROM sys.partition_range_values, sys.partition_functions 
WHERE sys.partition_functions.function_id = sys.partition_range_values.function_id
AND sys.partition_functions.name = 'MyPartitionFunc' AND boundary_id = 1

  還可以通過如下腳本,獲取分區表中各分區的數據情況(行數,最大值,最小值):

SELECT 
partition
= $PARTITION.MyParitionFunc([ParitionDate])
,
rows = COUNT(*)
,
min = MIN([ParitionDate])
,
max = MAX([ParitionDate])
FROM [MyTable]
GROUP BY $PARTITION.MyParitionFunc([ParitionDate])
ORDER BY PARTITION

  具體可以參照MSDN:從已分區表和索引中查詢數據和元數據

NET技術Sql Server性能優化——Partition(管理分區),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 被老头下药玩好爽 | 成 人 动漫3d 在线看 | 日日噜噜夜夜爽爽 | 91蜜桃视频 | 中文字幕视频在线观看 | 亚洲伊人久久精品 | 亚洲午夜精品AV无码少妇 | 韩国女主播内部vip自带氏巾 | 翘臀后进美女白嫩屁股视频 | 国产乱人视频在线观看 | 性一交一乱一色一视频 | 国产在线一卡二卡 | 日本内射精品一区二区视频 | 嗯啊好爽视频 | 被男按摩师添的好爽在线直播 | 欧美高清vivoesosexo18 | 无码天堂亚洲内射精品课堂 | 亚洲精品中文字幕制 | 蜜臀AV精品一区二区三区 | 国产精品系列在线观看 | 大地影院日本韩国电影免费观看 | 美女全光末满18勿进 | 久久99国产精品一区二区 | 国产精品99久久免费黑人人妻 | 婷婷四房播客五月天 | 国产色精品久久人妻无码看片软件 | 青青视频国产依人在线 | 武侠古典久久亚洲精品 | 免费看黄色一级 | 久久精品视在线观看2 | 日本六九视频 | 婷婷五月久久丁香国产综合 | 果冻传媒mv国产陈若瑶主演 | 日本久久免费大片 | 免费欧美大片 | 老版香蕉版下载 | 樱桃视频高清免费观看在线播放 | 97精品视频在线观看 | 国产午夜福利片 | 一道本无吗d d在线播放 | ppypp日本欧美一区二区 |