sqlserver 如何按年按月创建分区函数

我创建了分区函数如下:
create partition function pf_month1(varchar(8))
as range left for values (‘20120131‘,‘20120229‘,‘20120331‘,‘20120430‘,‘20120531‘,‘20120630‘,‘20120731‘,‘20120831‘,‘20120930‘,‘20121031‘,‘20121130‘)

但有一个问题,遇到跨年怎么处理?

如果到了2013年,所有的数据都会放在 最后一个分区里面,怎么处理?有没有更好一点的分区函数,按年按月进行分区?

------解决方案--------------------
用ALTER PARTITION FUNCTION/SCHEME
参考
http://msdn.microsoft.com/zh-cn/library/ms186307.aspx
http://msdn.microsoft.com/zh-cn/library/ms190347.aspx
------解决方案--------------------
1.用每月1号做分区边界比较好,省得判断各月的天数.
2.分区是用来加快查询的,但各分区最好是独立的物理磁盘,放在同一个物理盘上,并不能增加许多性能.
3.如果按月分区,说明每月的数据量非常大,如果这样,则满一个月后修改分区函数即可,而不是一下子把所有分区都划分好.
4.如果满一个月后,前面某些月的数据使用量不大,则可以合并,这样只要把分区重新划分一下即可.
------解决方案--------------------
假定现在的分区边界是 100 200 300 400
也就是

<100 200~300 300~400 >400

增加一个边界是500的分区

SQL code
--指定下一个分区应用文件组.(如:PRIMARY)
ALTER PARTITION SCHEME [customer_scheme]  --分区架构
NEXT USED [PRIMARY]

--指定分区分界点为
ALTER PARTITION FUNCTION customer_partFunc()  --分区函数
SPLIT RANGE (500)
时间: 2024-10-06 20:57:49

sqlserver 如何按年按月创建分区函数的相关文章

Oracle 11g 通过间隔分区实现按月创建表分区

在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理.由于表中的数据是历史交易,故按月分区,提升查询和管理. 由于之前对于表分区了解不多,为了实现上述功能查了很多资料,一开始的方向是通过Crontab调用Shell脚本来按月自动创建分区,或者使用Oracle的Job调用存储过程来自动创建分区.在研究上述两套方案的过程中,无意发现Oracle11g有间隔分区功能,对于使用Range分区的可以按年,月,日来自动生成分区.语法如下: CREAT TABLE TABLE1 ( TABLE

Oracle 11g下自动创建分区

11g之前,维护分区需要手工.11g之后使用interval来实现自动扩展分区,简化了维护. 根据年  INTERVAL(NUMTOYMINTERVAL(1,'YEAR')) 根据月  INTERVAL(NUMTOYMINTERVAL(1,'MONTH')) 根据天  INTERVAL(NUMTODSINTERVAL(1,'DAY')) 下面用按月自动扩展来做个试验: SQL> create table t_range (id number not null PRIMARY KEY, test_

创建分区、格式化分区、挂载分区

大致思路: 1.查看分区状态 2.创建分区 3.重新加载分区表 4.格式化分区 5.挂载分区到目录 查看当前分区状态: [[email protected] ~]# fdisk -cul   Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Secto

linux创建分区、文件系统、挂载操作

创建分区: 分别输入n(创建分区).p(主分区)或e(扩展分区).设置大小,最后w保存退出. 使用kpartx -af /dev/sdb 或partx -a /dev/sdb,让内核重读设备分区表. 创建文件系统:mkfs -t ext4 /dev/sdb1,如果出现如下问题: 说明分区/dev/sdb1正在被DM管理,可以使用dmsetup status查看,然后使用dmsetup remove /dev/sdb1 ,再次执行mkfs命令. 挂载分区:mount -t ext4 /dev/sd

创建分区

1.为已存在表创建分区 ALTER TABLE `tb_xxx` PARTITION BY LIST COLUMNS(col_id)(PARTITION p0 VALUES IN (1),PARTITION p1 VALUES IN (4),PARTITION p2 VALUES IN (5)); 分区注意事项. A.字段必须包含在主键中; B.分区字段不能为NULL 2.查看select涉及到的分区 EXPLAIN PARTITIONS SELECT * FROM tb_xxx WHERE c

oracle数据表创建分区

场景: 遇到1亿数据量的数据需要根据用户名做些数据统计分析,想直接做些聚合计算基本没可能,于是打算先根据日期按照年月创建分区,然后对各个分区分别进行统计,最后汇总结果. 操作方式,新建分区表,然后用ETL工具抽取源并写入新表. create table TEMP_TEST ( log_id NUMBER(20), user_id NUMBER(20), user_name NVARCHAR2(200), money NUMBER(30,8), history_total NUMBER(30,8)

第十二章——SQLServer统计信息(1)——创建和更新统计信息

原文:第十二章--SQLServer统计信息(1)--创建和更新统计信息 简介: 查询的统计信息: 目前为止,已经介绍了选择索引.维护索引.如果有合适的索引并实时更新统计信息,那么优化器会选择有用的索引供查询之用,因为SQLServer优化器是基于开销的优化.当在where和on上的列上的数据需要显示在结果集的时候,如果有实时的统计信息,优化器会选择最好的执行方式,因为优化器会从统计信息中获得这些数据的明细情况. 在创建索引的时候,SQLServer就会在索引列上创建统计信息.简单来说,统计信息

SqlServer中以xml作为参数创建表格的存储过程

用到的工具: SqlServer java mybatis 第一步:创建function,用于获取xml中的数据 CREATE function create_table (@str xml) returns @tb table(sourceId varchar(20)) as begin insert into @tb SELECT v.value('@sourceId[1]','VARCHAR(20)') AS sourceId FROM @str.nodes('/RSSsources/rs

在CentOS7下添加硬盘及创建分区

1.无需重启扩展空间[[email protected] ~]# ls /sys/class/scsi_host/host0 host1 host2[[email protected] ~]# echo "- - -" > /sys/class/scsi_host/host0/scan [[email protected] ~]# echo "- - -" > /sys/class/scsi_host/host1/scan [[email protect