SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?...

如果你的数据库中某一个表中的数据满足以下几个条件,那么你就要考虑创建分区表了。

    1、数据库中某个表中的数据很多。很多是什么概念?一万条?两万条?还是十万条、一百万条?这个,我觉得是仁者见仁、智者见智的问题。当然数据表中的数 据多到查询时明显感觉到数据很慢了,那么,你就可以考虑使用分区表了。如果非要我说一个数值的话,我认为是100万条。

    2、但是,数据多了并不是创建分区表的惟一条件,哪怕你有一千万条记录,但是这一千万条记录都是常用的记录,那么最好也不要使用分区表,说不定会得不偿失。只有你的数据是分段的数据,那么才要考虑到是否需要使用分区表。

    3、什么叫数据是分段的?这个说法虽然很不专业,但很好理解。比如说,你的数据是以年为分隔的,对于今年的数据而言,你常进行的操作是添加、修改、删除 和查询,而对于往年的数据而言,你几乎不需要操作,或者你的操作往往只限于查询,那么恭喜你,你可以使用分区表。换名话说,你对数据的操作往往只涉及到一 部分数据而不是所有数据的话,那么你就可以考虑什么分区表了。

    那么,什么是分区表呢?

    简单一点说,分区表就是将一个大表分成若干个小表。假设,你有一个销售记录表,记录着每个每个商场的销售情况,那么你就可以把这个销售记录表按时间分成 几个小表,例如说5个小表吧。2009年以前的记录使用一个表,2010年的记录使用一个表,2011年的记录使用一个表,2012年的记录使用一个 表,2012年以后的记录使用一个表。那么,你想查询哪个年份的记录,就可以去相对应的表里查询,由于每个表中的记录数少了,查询起来时间自然也会减少。

    但将一个大表分成几个小表的处理方式,会给程序员增加编程上的难度。以添加记录为例,以上5个表是独立的5个表,在不同时间添加记录的时候,程序员要使 用不同的SQL语句,例如在2011年添加记录时,程序员要将记录添加到2011年那个表里;在2012年添加记录时,程序员要将记录添加到2012年的 那个表里。这样,程序员的工作量会增加,出错的可能性也会增加。 

    使用分区表就可以很好的解决以上问题。分区表可以从物理上将一个大表分成几个小表,但是从逻辑上来看,还是一个大表。

    接着上面的例子,分区表可以将一个销售记录表分成五个物理上的小表,但是对于程序员而言,他所面对的依然是一个大表,无论是2010年添加记录还是 2012年添加记录,对于程序员而言是不需要考虑的,他只要将记录插入到销售记录表——这个逻辑中的大表里就行了。SQL Server会自动地将它放在它应该呆在的那个物理上的小表里。

    同样,对于查询而言,程序员也只需要设置好查询条件,OK,SQL Server会自动将去相应的表里查询,不用管太多事了。

    这一切是不是很诱人?

    的确,那么我们就可以开始动手创建分区表了。

    第一、创建分区表的第一步,先创建数据库文件组,但这一步可以省略,因为你可以直接使用PRIMARY文件。但我个人认为,为了方便管理,还是可以先创 建几个文件组,这样可以将不同的小表放在不同的文件组里,既便于理解又可以提高运行速度。创建文件组的方法很简单,打开SQL Server Management Studio,找到分区表所在数据库,右键单击,在弹出的菜单里选择“属性”。然后选择“文件组”选项,再单击下面的“添加”按钮,如下图所示:

 

    第二,创建了文件组之后,还要再创建几个数据库文件。为什么要创建数据库文件,这很好理解,因为分区的小表必须要放在硬盘上,而放在硬盘上的什么地方 呢?当然是文件里啦。再说了,文件组中没有文件,文件组还要来有啥用呢?还是在上图的那个界面,选择“文件”选项,然后添加几个文件。在添加文件的时候要 注意以下几点:

    1、不要忘记将不同的文件放在文件组中。当然一个文件组中也可以包含多个不同的文件。

    2、如果可以的话,将不同的文件放在不同的硬盘分区里,最好是放在不同的独立硬盘里。要知道IQ的速度往往是影响SQL Server运行速度的重要条件之一。将不同的文件放在不同的硬盘上,可以加快SQL Server的运行速度。

    在本例中,为了方便起见,将所有数据库文件都放在了同一个硬盘下,并且每个文件组中只有一个文件。如下图所示。

    第三、创建一个分区函数。这一步是必须的了,创建分区函数的目的是告诉SQL Server以什么方式对分区表进行分区。这一步必须要什么SQL脚本来完成。以上面的例子,我们要将销售表按时间分成5个小表。假设划分的时间为:

    第1个小表:2010-1-1以前的数据(不包含2010-1-1)。

    第2个小表:2010-1-1(包含2010-1-1)到2010-12-31之间的数据。

    第3个小表:2011-1-1(包含2011-1-1)到2011-12-31之间的数据。

    第4个小表:2012-1-1(包含2012-1-1)到2012-12-31之间的数据。

    第5个小表:2013-1-1(包含2013-1-1)之后的数据。

    那么分区函数的代码如下所示:

view plaincopy to clipboardprint?
  1. CREATE PARTITION FUNCTION partfunSale (datetime)  
  2. AS RANGE RIGHT FOR VALUES ('20100101','20110101','20120101','20130101')  
CREATE PARTITION FUNCTION partfunSale (datetime) AS RANGE RIGHT FOR VALUES ('20100101','20110101','20120101','20130101') 

    其中:

    1、CREATE PARTITION FUNCTION意思是创建一个分区函数。

    2、partfunSale为分区函数名称。

    3、AS RANGE RIGHT为设置分区范围的方式为Right,也就是右置方式。

    4、FOR VALUES ('20100101','20110101','20120101','20130101')为按这几个值来分区。

    这里需要说明的一下,在Values中,'20100101'、'20110101'、'20120101'、'20130101',这些都是分区的条 件。“ 20100101”代表2010年1月1日,在小于这个值的记录,都会分成一个小表中,如表1;而小于或等于'20100101'并且小于 '20110101'的值,会放在另一个表中,如表2。以此类推,到最后,所有大小或等于'20130101'的值会放在另一个表中,如表5。

    也许有人会问,为什么值“ 20100101”会放在表2中,而不是表1中呢?这是由AS RANGE RIGHT中的RIGHT所决定的,RIGHT的意思是将等于这个值的数据放在右边的那个表里,也就是表2中。如果您的SQL语句中使用的是Left而不 是RIGHT,那么就会放在左边的表中,也就是表1中。

    第四、创建一个分区方案。分区方案的作用是将分区函数生成的分区映射到文件组中去。分区函数的作用是告诉SQL Server,如何将数据进行分区,而分区方案的作用则是告诉SQL Server将已分区的数据放在哪个文件组中。分区方案的代码如下所示:

view plaincopy to clipboardprint?
  1. CREATE PARTITION SCHEME partschSale  
  2. AS PARTITION partfunSale  
  3. TO (  
  4.     Sale2009,  
  5.     Sale2010,  
  6.     Sale2011,  
  7.     Sale2012,  
  8.     Sale2013)  
CREATE PARTITION SCHEME partschSale AS PARTITION partfunSale TO ( Sale2009, Sale2010, Sale2011, Sale2012, Sale2013) 

    其中:

    1、CREATE PARTITION SCHEME意思是创建一个分区方案。

    2、partschSale为分区方案名称。

    3、AS PARTITION partfunSale说明该分区方案所使用的数据划分条件(也就是所使用的分区函数)为partfunSale。

    4、TO后面的内容是指partfunSale分区函数划分出来的数据对应存放的文件组。

    到此为止,分区函数和分区方案就创建完毕了。创建后的分区函数和分区方案在数据库的“存储”中可以看到,如下图所示:

    最后,创建分区表,创建方式和创建普遍表类似,如下所示:

view plaincopy to clipboardprint?
  1. CREATE TABLE Sale(  
  2.     [Id] [int] IDENTITY(1,1) NOT NULL,  
  3.     [Name] [varchar](16) NOT NULL,  
  4.     [SaleTime][datetime] NOT NULL  
  5. ) ON partschSale([SaleTime])  
CREATE TABLE Sale( [Id] [int] IDENTITY(1,1) NOT NULL, [Name] [varchar](16) NOT NULL, [SaleTime][datetime] NOT NULL ) ON partschSale([SaleTime]) 

    其中:

    1、CREATE TABLE 意思是创建一个数据表。

    2、Sale为数据表名。

    3、()中为表中的字段,这里的内容和创建普通数据表没有什么区别,惟一需要注意的是不能再创建聚集索引了。道理很简单,聚集索引可以将记录在物理上顺 序存储的,而分区表是将数据分别存储在不同的表中,这两个概念是冲突的,所以,在创建分区表的时候就不能再创建聚集索引了。

    4、ON partschSale()说明使用名为partschSale的分区方案。

    5、partschSale()括号中为用于分区条件的字段是SaleTime。

    OK,一个物理上是分离的,逻辑上是一体的分区表就创建完毕了。查看该表的属性,可以看到该表已经属于分区表了。

 

原创不容易,转载请注明出处。http://blog.csdn.net/smallfools/archive/2009/12/03/4930810.aspx

转载于:https://www.cnblogs.com/Little-Li/archive/2010/11/03/1868145.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java图形界面颜色随机变换,JavaScript实现鼠标移入随机变换颜色

大家好!今天分享一个在 JavaScript中,实现一个鼠标移入可以随机变换颜色。/* 这里定义一下div(块元素)已下span 标签的宽.高.边框线以及边框线的颜色*/span{display: block;width: 80px;height: 80px;border: 1px solid #000000;float: left;}var adocum…

Vscode 用Filter Line看日志,很爽

因为某种原因,我抛弃了Notepad然后一直没有找到一个比较好的日志查看软件,最近发现Vscode里面的这个插件不错,给大家推荐一下。中文详情链接:https://everettjf.github.io/2018/07/03/vscode-extension-filter-line/推荐阅读&…

zblog php 七牛缩略图,zblog中Gravatar头像不显示解决方法

解决zblog博客Gravatar头像不显示方法一第一个,解决zblog博客Gravatar头像不显示解决方法是对其进行修复操作。造成不显示的原因主要是Gravatar头像地址错误。所以,我们需要对头像地址进行更改。1、进入自己的博客后台。2、找到现在使用的主题模板中的&a…

SpringCloud学习--微服务架构

目录 微服务架构快速指南 SOA Dubbo Spring Cloud Dubbo与SpringCloud对比 微服务(Microservice)架构快速指南 什么是软件架构?    软件架构是一个包含各种组织的系统组织,这些组件包括 Web服务器, 应用服务器, 数据库,存储, 通讯层), 它们彼此或和环境存在关系…

工作九年的硬件工程师,想对我们说些什么?

△向上生长, TO BE TO UP. 10万工程师的成长充电站△作者:徐新文,排版:晓宇微信公众号:芯片之家(ID:chiphome-dy)时光荏苒,岁月如梭,转眼就在硬件工程师的岗位上工作了九…

用JAI实现对TIF(TIFF)格式图片的合并

用JAI实现对TIF(TIFF)格式图片的合并 方法一: import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import javax.media.jai.JAI; import javax.media.jai.RenderedOp; import com.…

StringBuffer/StringBuilder/String的区别

1、在执行速度上:Stringbuilder->Stringbuffer->String 2、String是字符串常量 Stringbuffer是字符串变量 Stringbuilder是字符串变量 有可能我们会疑惑String怎么是字符串变量。看以下代码: String str adc; str str “ef”&#x…

你知道kernel version的实现原理和细节吗

引言kernel 启动时通常会看到下面第二行信息的内容,它们代表了当前 kernel 的版本、编译工具版本、编译环境等信息。Booting Linux on physical CPU 0x0 Linux version 5.4.124 (funnyfunny) (gcc version 6.5.0 (Linaro GCC 6.5-2018.12)) #30 SMP Sat Sep 11 11:1…

Android 为你的应用程序添加快捷方式【优先级高的快捷方式】

有人会说,快捷方式,不是安装完应用程序后,长按应用程序的ICON然后将它拖到桌面上不就行了吗?没错,这样是一种方法,但这种方法有一个缺点,看图吧: 如上图,如果我们长按桌面…

icinga2 php模块,在Ubuntu 18.04系统上安装Icinga2监视工具的方法

本文介绍在Ubuntu 18.04系统上安装Icinga2监视工具的方法,使用Icinga 2可以监控:服务器资源、网络服务、网络设备。简介Icinga 2是一个开源,可扩展和可扩展的监视工具,可检查网络资源的可用性,通知用户中断&#xff0c…

面试官问:malloc(0)时程序会返回什么?

今天跟大家找了篇文章,主要是一个面试中的有趣问题,其实有些问题在开发中没有遇到过会很难回答出来,如果在面试过程中回答正确,皆大欢喜,拿到offer的概率更大;回答不出来也不要信口开河,面试官主…

2018 Machine Learning

2018/8/13 线性模型(西瓜书P53~P73)Optimizerhttps://blog.csdn.net/u012151283/article/details/781549172018/8/15 SVM(西瓜书)2018/8/16 面试题 https://www.cnblogs.com/zuochongyan/p/5407053.html熵、联合熵、条件熵、交叉熵与相对熵 ??归一化方法…

考研失败了,怎么办?

有读者提到这个问题,顺带回答下。我没有考研过,但是身边有很多研究生和博士,额,还有很多海外留学的博士。前天我们有外部厂商来公司讨论合作,领导让我跟着一起介绍项目,对方的人问了一句:“你们…

10月28号日志

匆匆忙忙而来,怀着梦想、怀着希望来到苏州这个地方。想用自己在校学的知识来改变自己的命运,我空空而来想满载而归。在这一段的时间里,我深深感受到了同学情深,深似海。老师恩重重如山。在长生果科技有限公司工作已将近两个月了的…

在php中怎么用js跳转页面跳转,在php中怎么用redirect实现页面跳转?

1、thinkPHP 的Action类的redirect方法可以实现页面的重定向功能,redirect 重定向的通用语法为:edirect(url,paramsarray(),delay0,msg) // 跳转到 edit 操作 $this->redirect(edit)。2、// 跳转到 UserAction下的edit 操作 this->redirect(User/…

[BZOJ 4025] 二分图

题目传送-BZOJ4025 题意&#xff1a; 有一张\(n\)个节点的无向图,其中边\(i\)在\(s_i\)出现,\(e_i\)结束,并连接着节点\(x,y\). 并保证\(s_i < e_i \le T\),要求对于每个时间\(t\le T\)输出此时的图是否是二分图。\(n\le100000,m\le200000,T\le100000\) 题解&#xff1a; 这…

晒一波工程师的工位,你喜欢哪种?

程序员的圈子啊那是十分神秘&#xff0c;又令人着迷的。每天的工作就是对着电脑&#xff0c;那他们的工作是如何的呢&#xff1f;我们来品一品&#xff08;PS&#xff1a;后面奉上各位大佬的桌面&#xff0c;别走开哦&#xff09;↓↓↓最最常见的普通版&#xff1a;升级版&…

传360以原彩虹QQ研发团队为班底拟强推IM

据知情人士透露&#xff0c;奇虎360开发即时通讯工具IM软件已成定局&#xff0c;正式推出只是时间问题。同时&#xff0c;该知情人还透露&#xff0c;目前负责360公司即时通讯软件项 目的核心班底正是51.com原“彩虹QQ”&#xff08;51.com对外官方产品名称为“彩虹显IP辅助软件…

linux无法安装php-fpm,Linux下的php-fpm相关问题解决

今天搭建LNMP环境时,在安装PHP编译的时候出现了问题,首先在解压安装包后配置检测环境./configure --prefix/usr/local/php \--with-gd \--enable-gd-native-ttf \--enable-mysqlnd \--with-mysqlmysqlnd \--with-pdo-mysqlmysqlnd \--with-openssl \--enable-mbstring \--enabl…

recovery.conf 用于 stream replication

recovery.conf 是 postgresql slave 数据库的重要文件&#xff0c;示例文件为. $ ls -l $PGHOME/share/recovery.conf.sample可以编辑 $PGDATA/recovery.conf 异步stream recovery_target_timeline latest standby_mode on primary_conninfo host192.168.56.201 port5432 us…