1. Mysql 表数据分区,每10000条数据自动分区
ql代码
#这里使用HASH表分区,mysql会根据HASH字段来自动分配数据到不同的表分区,这种情况适用于没有表分区规则但是有需要分表来进行查询优化的情况。这里根据id字段hash规则创建2个表分区
CREATE TABLE `creater_bak` (
`id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY HASH(id) PARTITIONS 2
创建完成后开始导入原表数据:
Sql代码
insert into creater_bak select * from creater;
导入以后的新表数据就是分布在不同的2个表分区中了。
如果数据量非常大,觉得预设的表分区数量太少,那么可以新增表分区,mysql会自动重新分配:
Sql代码
#这里新增8个表分区,加上新建表时候的2个,一共10个表分区了
ALTER TABLE `creater_bak` ADD PARTITION PA
2. SQL server 表分区问题,大家帮忙看看吧,谢啦
你第一个句子应该是创建了三个分区:<='01/01/2007'、<='01/01/2008'并且>'01/01/2007'、>'01/01/2008',所以下面的名称应该是三个就够了(FG1,FG2,FG3)
参考:
SQL Server数据库表分区操作过程由三个步骤组成:
1. 创建分区函数
2. 创建分区架构
3. 对表进行分区
下面将对每个步骤进行详细介绍。
步骤一:创建一个分区函数
此分区函数用于定义你希望SQL Server如何对数据进行分区的参数值([u]how[/u])。这个操作并不涉及任何表格,只是单纯的定义了一项技术来分割数据。
我们可以通过指定每个分区的边界条件来定义分区。例如,假定我们有一份Customers表,其中包含了关于所有客户的信息,以一一对应的客户编号(从1到1,000,000)来区分。我们将通过以下的分区函数把这个表分为四个大小相同的分区:
_partfunc(int)
ASRANGERIGHT
FORVALUES(250000,500000,750000)
这些边界值定义了四个分区。第一个分区包括所有值小于250,000的数据,第二个分区包括值在250,000到49,999之间的数据。第三个分区包括值在500,000到7499,999之间的数据。所有值大于或等于750,000的数据被归入第四个分区。
请注意,这里调用的"RANGE RIGHT"语句表明每个分区边界值是右界。类似的,如果使用"RANGE LEFT"语句,则上述第一个分区应该包括所有值小于或等于250,000的数据,第二个分区的数据值在250,001到500,000之间,以此类推。
步骤二:创建一个分区架构
一旦给出描述如何分割数据的分区函数,接着就要创建一个分区架构,用来定义分区位置([u]where[/u])。创建过程非常直截了当,只要将分区连接到指定的文件组就行了。例如,如果有四个文件组,组名从"fg1"到"fg4",那么以下的分区架构就能达到想要的效果:
CREATEPARTITIONSCHEMEcustomer_partscheme
ASPARTITIONcustomer_partfunc
TO(fg1,fg2,fg3,fg4)
注意,这里将一个分区函数连接到了该分区架构,但并没有将分区架构连接到任何数据表。这就是可复用性起作用的地方了。无论有多少数据库表,我们都可以使用该分区架构(或仅仅是分区函数)。
步骤三:对一个表进行分区
定义好一个分区架构后,就可以着手创建一个分区表了。这是整个分区操作过程中最简单的一个步骤。只需要在表创建指令中添加一个"ON"语句,用来指定分区架构以及应用该架构的表列。因为分区架构已经识别了分区函数,所以不需要再指定分区函数了。
例如,使用以上的分区架构创建一个客户表,可以调用以下的Transact-SQL指令:
CREATETABLEcustomers(FirstNamenvarchar(40),LastNamenvarchar(40),CustomerNumberint)
ONcustomer_partscheme(CustomerNumber)
关于SQL Server的表分区功能,你知道上述的相关知识就足够了。记住!编写能够用于多个表的一般的分区函数和分区架构就能够大大提高可复用性。
3. oracle 大表,创建分区表如何按月分区 求详细sql
create table xxx(id number,time date)
parttion by range(time)
(partion part1 values less than (to_date('2012-01-31','歼唤拿yyyy-mm-dd'氏搭)) tablespace tb1,
partion part 2 vales less than(to_date('链基2012-01-31','yyyy-mm-dd')) tablespace tb2);
4. hive动态分区参数配置 利用sql怎么设置
静态分区SP(static partition)
动态分区DP(dynamic partition)
静态分区与动态分区的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断。详细来说,静态分区的列实在编译时期,通过用户传递来决定的;动态分区只有在SQL执行时才能决定。
二)实战演示如何在Hive中使用动态分区
1、创建一张分区表,包含两个分区dt和ht表示日期和小时
[sql] view plain
CREATE TABLE partition_table001
(
name STRING,
ip STRING
)
PARTITIONED BY (dt STRING, ht STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
2、启用hive动态分区,只需要在hive会话中设置两个参数:
5. sqlserver2008怎么实现自动分区表
/*第一步:创建分区函数*/
Create partition function Part_func_Bag(varchar(20)) as range right
/*正式区间
for values(N'01100923909760', N'01100936207030', N'6311001806524',N'92451400060101');*/for values(N'91701311710807', N'07201280707101', N'8011011089884',N'80241001430714');goselect * from Bag where BagCode in(N'91701311710807', N'07201280707101', N'8011011089884',N'80241001430714')
/*第二步:创建文件组和文件*/
alter database ZXAutoCode add filegroup [Bag_1]; alter database ZXAutoCode add filegroup [Bag_2];alter database ZXAutoCode add filegroup [Bag_3];alter database ZXAutoCode add filegroup [Bag_4];goalter database ZXAutoCode add file (name = Bag1_data,filename = 'E:\MSSQL\TESTDATA\Bag1_data.ndf',size = 3MB) to filegroup [Bag_1];alter database ZXAutoCode add file (name = Bag2_data,filename = 'E:\MSSQL\TESTDATA\Bag2_data.ndf',size = 3MB) to filegroup [Bag_2];alter database ZXAutoCode add file (name = Bag3_data,filename = 'E:\MSSQL\TESTDATA\Bag3_data.ndf',size = 3MB) to filegroup [Bag_3]; alter database ZXAutoCode add file (name = Bag4_data,filename = 'E:\MSSQL\TESTDATA\Bag4_data.ndf',size = 3MB) to filegroup [Bag_4]; go
/*第三步:创建分区方案并关联到分区函数*/
Create partition scheme Part_func_Bag_scheme as partition Part_func_Bag to ([Bag_1],[Bag_2],[Bag_3],[Bag_4],[Primary]); go
/*第四步 重建索引(删除聚集索引以及需要分区字段的索引后重建该类索引,表被按分区值将分配到各文件组。数据在这一步开始转移。)*/
EXEC sp_helpindex N'Bag' --查看orders中使用的索引 drop index idx_cl_od on Bag;gocreate clustered index idx_cl_od on Bag(bagcode) on Part_func_Bag_scheme(bagcode); go
6. SQL Server 自动化管理分区设计方案
一 设计说明
设计这个自动化的目的是想要交替 重复地使用固定的几个分区(分区编号 ~ )来保存数据 当最后一个分区就是快满的时候 我们会把最旧数据的分区的数据清空出分区 新数据就可以使用老分区空间了
应用这个自动化管理分区的环境是有些限制的 其一 分区的数据是呈现递增的 比如分区字段是自增Id值 或者是以日期作为分区;其二 可以接受 历史数据被移除分区表带来的问题 其三 一天进库的数量不应大于分区管理表PartitionManage中Part_Value与 Change_Value的差 因为我们作业执行的频率是 天 不过你可以调整Change_Value或者作业的执行频率;
具体脚本可以参考 SQL Server 自动化删除表分区设计方案
二 看图说话
(图 整体概念图)
数据流经过分区方案 被分配到不同的分区中 从图中可以看出 分区是可以重复利用的 后台有一个所谓的自动化切换分区的作业在跑 目的就是如果 重复利用这些分区 这里的PRIMARY目的就是说明它与其它文件组的一个平级关系 而且我们在做交换分区时候也会用到PRIMARY 需要事先分配足够 的空间
(图 自动化设计图)
这是自动化切换分区作业的逻辑处理 其中分区管理表的设计是比较重要的 它的灵活度关系到整个自动化的效果; 这个逻辑有以下几个特点
分区的索引进行存储位置对齐;其它索引在创建时就陵孙咐使用了分区方案 索引数据跟随分区数据一起存储在分区中;
分区管理表 包含了分区记录数预警设计 在Id达到这个值后凯樱就会进行交换分区;
分区管理表 FileGroup_String字段的数据可以通过SQL脚本自动化生成 条件就是分区文件组名称需要有规律;
临时表是创建在PRIMARY主分区上 跟原表使用相同的分区方案;需要事先给PRIMARY分配大于或者等于一个分区文件大小的空间 这样在交换分区的时候就不用增量为主分区分配数据空间;
交换旧数据到临时表 使用下面的语句可以把数据交换到相同的分区中编号 这样可以应对临时表就是一个历史表 而好处就是历史表也同样使用了分区
ALTER TABLE [tb] SWITCH PARTITION @PARTITION_num TO [Temp_tb] PARTITION@PARTITION_num
这里需要先修改分区方案 才能修改分区函数 这个跟创建分区函数与分区方案的顺序是刚好相反的
(图 分区管理表PartitionManage)
字段说明 Change_Value(预警Id值)Part_Value(分区函数值)FileGroup_String(分区文件组名称)IsDone(状态)UpdateTime(更新时间);
这就是那个分区管理表(PartitionManage) 它是经过了几个版本后才把字段确定下来的 现在它已经比较完善了 能应对比较多的情况
比如我们可以修改预警值(Change_Value) 让数据提早进入交换分区;
比如我们可以修改分区值(Part_Value) 达到调整分区间隔的目的;
比如我们可以修改分区文件组名称(FileGroup_String) 达到跳级文件组的目的;通过修改分区管理表来设置分区值与分区文件组的对应关系;
再比如 我们一次性修改了分区方案和分区函数 已经去到很后面的分区值了 那么我们只要设置这些分区值的状态(IsDone)为 (True)就可以解决了
记录了进行交换分区的时间(UpdateTime) 方便查询;
(图 分区为Id字段的记录分布图)
这是一个实战中的分区情况 这样的分区特点就是分区里面的记录数基本上是持平的 在Partition_num= 的记录中明显多了很多记录 这就是因为我们没有及时进行交换分区造成的
(图 分尺纯区为ClassId(分类)字段的记录分布图)
lishixin/Article/program/SQLServer/201311/22352