SQLSERVER2008R2创建分区表、转换分区表、交换数据
来源:互联网 发布:js div左右滑动效果 编辑:程序博客网 时间:2024/06/11 20:51
分区
表和索引的分区可以不同,但聚集索引必须和表采用相同的分区方案,必须采用相同的分区列,也就是说,如果表先创建了分区表,那么在创建分区聚集索引时,该索引必须是表的分区列,而且索引也必须按照表的分区列进行分区。
图形化界面在表上创建分区:
表-右键-存储-创建分区-根据提示创建分区函数和分区方案即可。
需要首先添加好文件组和文件,最好一个文件组对应一个文件。
管理分区把某个分区中的数据移除到目标表:
1.表-右键-存储-管理分区-先选择为分区切换创建临时表-选择要将那个边界值的分区数据移出-立即运行即可。
2.表-右键-存储-管理分区-管理可调窗口应用场景中的分区数据-上方选择切出-下边可以选择新建表或者先前创建的表-立即运行即可
-------创建一个分区表
T-SQL创建分区表;
1.创建分区函数
CREATEPARTITIONFUNCTIONTESTFUNC(INT)
ASRANGELEFT --指定边界值包含在左边的分区还是右边的分区
FORVALUES('10','20') - --分区的边界值
GO
SELECT*FROMsys.partition_functions --- 查看分区表是否创建成功
2.创建分区方案
CREATEPARTITIONSCHEMETESTSCHEME
AS
PARTITIONTESTFUNC --要关联上一步骤创建的分区函数
TO
(filegroup1,filegroup2,filegroup3) --把分区映射到不同的文件组,文件组要事先创建好
SELECT * FROM sys.partition_schemes ---查看已创建的分区构架
创建分区表 ----只能在创建表时进行分区
CREATETABLE[dbo].[TESTPARTI](
[id][int]NOTNULL,
[name][varchar](20)NULL
)ONTESTSCHEME(ID) --指定分区方案和分区列
---向表中插入测试数据
3.查看各分区中的数据
SELECT*FROMTEST0509
WHERE$PARTITION.TESTFUNC(ID)=2 --此处2是分区
select$partition.TESTFUNC(20)--查询某一条数据存储在哪个分区,此处20是分区列的数据
SELECT$PARTITION.FUNC_DATE(KFRQ)ASID,COUNT(*)ASCOUNT --查看各个分区有多少条记录
FROMTB_CIS_PRESCRIPTION_DETAIL0510GROUPBY$PARTITION.FUNC_DATE(KFRQ)
4.修改分区函数添加一个分区
ALTERPARTITIONSCHEMETESTSCHEME --首先需要新增一个文件组,然后再使用该语句把文件组添加到分区方案中留给新增的分区使用
NEXTUSEDFILEGROUP4 --使用next used标记该文件组用于下一个新增的分区
GO
ALTERPARTITIONFUNCTIONTESTFUNC() ---修改分区函数,新增边界值,新增分区,使用上一步骤加入的文件组
SPLITRANGE('5')
5.使用MERGE删除一个边界值删除分区
ALTERPARTITIONFUNCTIONTESTFUNC()
MERGERANGE('5') ---删除边界值为5的分区
6.使用SWITCH移动数据
-----把分区表中的数据切换到另一分区表
两表要有相同的字段,字段属性,主键,索引,分区方案,这里是为了保证数据只能在同一个文件组内移动
若表上有索引,不管是聚集索引还是非聚集索引,索引必须使用和表一样的分区方案,分区列进行分区,叫做表与索引对齐,否则不能进行切换。
alter table orders switch partition 1 to ordersHistory partition 1
在已分区的表上创建索引(分区索引)时,应该注意以下事项:
唯一索引
建立唯一索引(聚集或者非聚集)时,分区列必须出现在索引列中。此限制将使SQL Server只调查单个分区,并确保表中宠物的新键值。如果分区依据列不可能包含在唯一键中,则必须使用DML触发器,而不是强制实现唯一性。
非唯一索引
对非唯一的聚集索引进行分区时,如果未在聚集键中明确指定分区依据列,默认情况下SQL Server 将在聚集索引列中添加分区依据列。
对非唯一的聚集索引进行分区时,如果未在聚集键中明确指定分区依据列,默认情况下SQL Server 将在聚集索引列中添加分区依据列。
对非唯一的非聚集索引进行分区时,默认情况下SQL Server 将分区依据列添加为索引的包含性列,以确保索引与基表对齐,若果索引中已经存在分区依据列,SQL Server 将不会像索引中添加分区依据列。
--把分区表中数据移动到普通表,普通表要满足一下要求
- 字段数量相同,对应位置的字段相同
- 相同位置的字段要有相同的属性,相同的类型,相同的聚集索引、主键
- 两个表在一个文件组中
CREATETABLE[dbo].TESTSEXP ---
(
[id][int]NOTNULL,
[name][varchar](20)NULL
)
ONFILEGROUP4 ---目标表必须和源表在同一文件组
ALTERTABLEdbo.TESTPARTI
SWITCH PARTITION1TOTESTSEXP ---把分区1中的数据移出到目标表
--从普通表复制数据到分区表
注意的是要先将分区表中的索引删除,即便普通表中存在跟分区表中相同的索引
alter table <普通表名> switch to 分区表 partition 1
----将普通表转换为分区表
1.
在分区依据列上创建一个聚集索引,并在聚集索引上使用分区方案即可。
若该普通表有主键和聚集索引,且聚集索引不是分区列,就要把该主键删除,重新创建该主键,但把该主键创建为非聚集索引,接着在分区列上创建聚集索引即可。
alter table 普通表名 --删除主键
drop constraint 主键名
alter table 普通表名 --重新创建主键,但创建为非聚集索引
add constraint 主键名 primary key nonclustered
( 主键字段 asc) on primary
create clustered index 索引名 --在分区列上创建聚集索引把普通表转换为分区表,此处的索引列要和分区列是同一列。
on 普通表名(字段名)
on 分区方案名(分区列名)
若主键是分区所在列,那么可以删除主键重新在该列创建聚集索引并分区即可。
- CREATE CLUSTERED INDEX CT_Sale1 ON Sale1([SaleTime])
- WITH ( DROP_EXISTING = ON) --如果该索引存在就删除
- ON 分区方案名(分区列名)
2.创建一个新的分区表,把旧表中的数据导入到新的分区表
-----将一个分区表转换为非分区表
可以通过使用删除分区的方式将表中所有分区删除,变成一个分区,从而转换成非分区表,虽然该表依然是分区表,但和普通表没有什么区别。
ALTERPARTITIONFUNCTIONTESTFUNC()
MERGERANGE('10')
ALTERPARTITIONFUNCTIONTESTFUNC()
MERGERANGE('20')
若是通过创建分区索引的方法将普通表转换成的分区表,除了删除分区来转换为普通表外,还可以通过删除分区索引转换为普通表。
1.删除分区索引
2.在原来字段算上重建一个索引
- CREATE CLUSTERED INDEX CT_Sale1 ON Sale1([SaleTime])
- WITH ( DROP_EXISTING = ON) --如果该索引存在就删除
- ON [PRIMARY]
0 0
- SQLSERVER2008R2创建分区表、转换分区表、交换数据
- 创建分区表+分区表的分类+创建散列分区表+查看散列分区表分区中的数据+创建列表分区表+查看列表分区表分区中的数据
- 创建分区表
- 创建分区表
- 创建分区表
- 创建分区表
- 创建分区表
- 创建分区表+分区+分区表的分类+创建范围分区表+查询分区里面的数据
- 关于非分区表转换分区表
- 实战分区表—创建分区表
- Oracle创建普通表转换为分区表
- 分区表
- 分区表
- 分区表
- 分区表
- 分区表
- 分区表
- 分区表
- 01背包
- getsupportfragmentmanager()找不到这个方法
- SVN误删根目录导致无法安装无法卸载无法更改办法( invalid device K:\)
- STM32F4板子使用LWIP进行组播收发数据的完整过程,附代码
- 【代码笔记】iOS-评分系统(小星星)
- SQLSERVER2008R2创建分区表、转换分区表、交换数据
- leetcode记录 257. Binary Tree Paths
- 推荐一个非常有用的WordPress插件:WP2CSDNBlog
- Android Material Design之Toolbar与Palette实践
- GCD基本用法
- android模拟器启动不了,出现乱码提示
- service工程报错解决方案
- 机器学习 条件随机场CRF
- Andriod Fragment---给Activity添加一个Fragment