天天躁日日躁狠狠躁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(管理分區),轉載需保留來源!

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

主站蜘蛛池模板: 午夜福利92看看电影80 | 沈芯语麻豆0076 视频 | 校花娇喘呻吟校长陈若雪视频 | 日日撸影院在线 | 光棍天堂在线a | 99热久这里都是精品小草 | 日韩精品在线看 | 国产欧美无码亚洲 | 国产色青青视频在线观看 | 亚洲色图在线播放 | 美女的jj | 黑人寄宿羽月希产后奶水 | 久久久高清国产999尤物 | 99热这里只有精品88 | 在线免费观看国产视频 | 国产午夜在线观看视频 | 亚洲日本欧美产综合在线 | 草莓在线观看 | 69夫妻交友网| 国产AV精品白浆一区二 | 午夜视频在线观看国产 | 精品欧美小视频在线观看 | 色综合99久久久国产AV | 亚洲国产剧情中文视频在线 | 欧美国产一区二区三区激情无套 | 日本久久精品视频 | 欧美成人精品高清在线观看 | 大陆老太交xxxxxhd在线 | 掀开奶罩边躁狠狠躁软学生 | 久久综合久久伊人 | 成人18视频在线 | 成人国产亚洲欧美成人综合网 | 亚洲成人欧美 | 一边捏奶头一边啪高潮会怎么样 | 日本亚欧热亚洲乱色视频 | 亚洲中文字幕国产综合 | 免费人成在线观看视频不卡 | 短篇合集纯肉高H深陷骚 | 好硬好湿好爽再深一点视频 | 久久91精品国产91久久户 | 狠狠色狠狠色狠狠五月ady |