再见西城 发表于 2015-1-16 22:44:11

MYSQL编程:保“库”之路:Oracle数据库功能回护

表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。oracle|数据|数据库|功能<P>Oracle数据库以其高牢靠性、平安性、可兼容性,失掉愈来愈多的企业的喜爱。怎样使Oracle数据库坚持优秀功能,这是很多数据库办理员体贴的成绩,依据笔者履历倡议无妨针对以下几个方面加以思索。1、分区
依据实践履历,在一个年夜数据库中,数据空间的尽年夜多半是被大批的表所占据。为了简化年夜型数据库的办理,改良使用的查询功能,一样平常可使用分区这类手腕。所谓分区就是静态表中的纪录分别到多少分歧的表空间上,使数据在物理上被支解开来,便于保护、备份、恢复、事件及查询功能。当利用的时分可创建一个毗连一切分区的视图,使其在逻辑上仍以一个全体呈现。
1.创建分区表

CreatetableEmployee(

EmpNovarchar2(10)primarykey,

Namevarchar2(30),

DeptNoNumber(2)



Partitionbyrange(DeptNo)

(partitionPART1valueslessthan(11)

tablespacePART1_TS,

partitionPART2valueslessthan(21)

tablespacePART2_TS,

partitionPART3valuselessthan(31)

tablespacePART3_TS

partitionPART4valueslessthan(MAXVALUE)

tablespacePART4_TS

);
表Employee根据DeptNo列举行分区。
2.分区索引</STRONG>

CreateindexEmployee_DeptNoonEmployee(DeptNo)local(

partitionPART1tablespacePART1_NDX_TS,

partitionPART2tablespacePART2_NDX_TS,

partitionPART3tablespacePART3_NDX_TS,

partitionPART4tablespacePART4_NDX_TS,

);
当分区中呈现很多事件而且要包管一切分区中的数据纪录的唯一性时接纳全局索引,在创建全局索引时,Global子句同意指定索引的局限值,这个局限值能够分歧于表分区的局限值。只要创建部分索引才会使索引分区与表分区间创建起逐一对应干系。因而,在年夜多半情形下,应当利用部分索引分区。若利用了此索引,分区就可以够很简单地将索引分区与表分区创建联系关系,部分索引比全局索引更容易于办理。
3.分区办理

依据实践必要,还可使用Altertable命令来增添、删除、互换、挪动、修正、重定名、分别、截短一个已存在分区的布局。
2、重修索引
假如表中纪录频仍地被删除或拔出,只管表中的纪录总量坚持稳定,索引空间的利用量会不休增添。固然纪录从索引中被删除,可是该纪录索引项的利用空间不克不及被从头利用。因而,假如表变更不定,索引空间量会不休增添,不管表中纪录数目是不是增添,只是由于索引中有效空间会增添。

要接纳那些曾被删除纪录利用的空间,必要利用Alterindexrebuild命令。能够做一个按期运转的批处置程序,来重修最举动表的索引。这个批处置程序能够在余暇时运转,以免该程序与其他使用程序抵触。若能保持索引的这一程序计划,即可和时接纳那些未利用空间,进步空间使用率。
3、段的碎片收拾
当天生一个数据库工具时(一个表或一个索引),经由过程用户缺省值或指定值来为它指定表空间。一个在表空间中天生的段,用于存储工具的相干数据。在段被封闭、压缩、截断之前,段所分派的空间将不被开释。
一个段是由局限构成,而局限是由相邻的Oracle块构成。一旦存在的局限不克不及再存储新的数据,这个段就会往取得新的局限,但其实不请求这些局限是相互相邻的。如许的扩大会一向持续下往,直到表空间中的数据文件不克不及供应更多的自在空间,大概局限数目已到达极限。
因而,一个碎片太多的数据段,不但会影响运转,也会激发表空间中的空间办理成绩。以是,每一个数据段只含有一个局限是非常无益的。借助监控体系,能够经由过程反省DBA_SEGMENTS数据字典视图来懂得哪些数据库工具含有10个或更多局限的段,断定其数据段碎片。
若一个段的碎片过量,可用两种办法办理:

1. 用准确的存储参数创建一个新表,将旧表的数据拔出到新表中,在删除旧表;

2. 使用Export/Import工具。
如:expsystem/managerfile=exp.dmpcompress=Ygrants=Yindexes=Y

tables=(T1,T2)

若输入乐成,进进Oracle,删除上述表。

注:compress=Y暗示将在输入过程当中修正它们的存储参数。

impsystem/managerfile=exp.dmpcommit=Ybuffer=64000full=Y
4、自在局限的碎片收拾
表空间中的一个自在局限是表空间中相连的自在(空间)块的汇合。当一个段封闭时,它的局限将被开释,并被标志为自在局限。但是,这些自在局限不再能与相邻的自在局限兼并,它们之间的界限一直存在。可是当表空间的缺省值pctincrease设置不是0时,SMON背景历程会按期将这些相邻的自在局限互助。若pctincrease设置为0,那末相邻自在局限不会被数据库主动兼并。但可使用Altertable命令"coalesce"选项,来强制举行相邻自在局限的兼并。
不举行自在局限兼并,在往后的空间哀求中,会影响到表空间中的空间分派。当必要一个充足年夜的局限时,数据库其实不会集并相邻的自在局限,除非没有其他选择。如许,当表空间中后面较小的自在局限已被利用时,将利用表空间中前面部分最年夜的一个自在局限。了局,会由于没有足欢嗟氖褂每占洌佣贾卤砜占湫枨蟮拿堋S捎谡庋那榭龀鱿郑故菘獾目占浞峙渚嗬硐朐嚼丛皆丁W杂煽占渌槠;岢鱿衷谀切┚9乇沼种匦律傻氖菘獗砗退饕小?
在幻想的Oracle表空间中,每个数据库工具存储在一个独自的局限中,而且一切无效自在空间会合在一个伟大而一连的局限中。如许,在一个工具必要附加存储空间时,能够在增添猎取充足年夜自在空间的大概性的同时,最小化空间中的轮回挪用,进步自在空间利用率。
最近由权威调查机构Evans数据公司进行的一项调查显示,MySQL在过去两年已经获得了25%的市场份额。该调查公司还预测,相比其他的开源数据库和闭源数据库。

深爱那片海 发表于 2015-1-19 21:53:01

可以动态传入参数,省却了动态SQL的拼写。

飘灵儿 发表于 2015-1-25 18:47:40

分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。

莫相离 发表于 2015-2-3 13:24:02

如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。

蒙在股里 发表于 2015-2-9 02:37:33

然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情

谁可相欹 发表于 2015-2-26 18:34:29

数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。

金色的骷髅 发表于 2015-3-16 05:51:17

这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?

分手快乐 发表于 2015-3-22 20:34:24

备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
页: [1]
查看完整版本: MYSQL编程:保“库”之路:Oracle数据库功能回护