网站大量收购闲置独家精品文档,联系QQ:2885784924

SQL数据库对象课案.doc

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SQL数据库对象课案

第十四章 其它数据库对象 我们前面学习了表、视图,本章将简要的学习其它数据库对象。 ======= 本章主要内容 ====== ⊙ 创建、维护、使用序列器 ⊙ 创建和维护索引 ⊙ 创建私用和公用同义词 其中INDEX非常复杂,将来会在DBA I、中级、高级课程深入去讲 DBA I我们会初步了解索引,中级课程详细了解索引的优化,高级课程了解索引的INTERNAL结构、索引遍历及索引拆分的原则。 我们看看这些ORACLE的对象 ORACLE对象 ======= 这些对象都可以在dba_objects里查的到,都是我们的SCHEMA对象,我们在第二章简单的介绍过. ⊙ SEQUENCE : 用于生成类似主键的序列值,还可以应用到其它列 ⊙ INDEX : 索引用于提高访问数据的速度 ⊙ SYNONYM : 同义词用于设置一个对象的别名,等同于原始对象,以便于书写方便 我们首先来了解下SEQUENCE,我们称为”序列器” SEQUENCE ===== 什么是SEQUENCE呢? 这个大家应该都了解一点,比如我们QQ群的学号等,我们在500群曾经有多个学生为一个学号250挣的死去活来,因为大家有并发,或者大家没有去判断别人有没有用了250号.而SEQUENCE很好的解决了这个问题。 序列是用户创建的数据库对象,它可以由多个用户共享,用来生成唯一的整数。 它通常用途是创建主键值,主键值对于每行必须是唯一的。序列可以递增,也可以递减。使用序列器代替应用控制,将节约时间,这是因为它可以减少编写生成序列的程序代码量,可以通过内置代码就可以实现。 SEQUENCE的好处 ======== ⊙ 我们的SEQUENCE就是来解决如上的并发和性能问题。即可以避免并发产生重复值,SEQUENCE是一个原子事务,取了值就已经生成,不可能再生成重复数据,保证每个请求生成一个唯一值。 ⊙ 可以按规律以特定的间隔生成一个数值,而我们的SCN就是一个类似序列器来生成的 ⊙ 就如学号,那如果没有SEQUENCE,那你必须判断学生表里学号最大的值,然后加1,这个要涉及到分组和表扫描,显然是不利的,那我们会采用把最大值保留在一个对象里,下次去就选择最大值加间隔值,这样就可以不去扫描实际的表了。 SEQUENCE特征 ======== 我们看SEQUENCE的特征 ⊙ SEQUENCE是会自动按递增或者递减生成一个唯一的号,它是整型。 ⊙ SEQUENCE是对象,我们不同的会话可以去读取该SEQUENCE,所以它是共享对象,它会做为共享对象保存在LIBRARY CACHE中 ⊙ 它常用在主键上生成主码 ⊙ 可以代替应用代码实现唯一值的序列号,而且序列号在并发访问时不存在读取出重复值,它不基于外部的事务。 ⊙ 将SEQUENCE的一批值预分配到内存,这样能更快速访问SEQUENCE,这个就是CACHE的功能。 SEQUENCE语法 ======== 这里是SEQUENCE的语法 选项属性 ⊙ INCREMENT BY N,N表示每次增长多少,指定序列号之间的间隔。 ⊙ START WITH N,表示初始SEQUENCE从哪个值开始。指定生成第一个序列号 ⊙ [NO]MAXVALUE用来设置序列号最大值,我们通常设置默认值,[NO]MAXVALUE默认值看到的是10^27 ⊙ [NO]MINVALUE定义最小值,同上面参数类似 ⊙ CYCLE,是一个循环的值,当你增长达到MAXVALUE时,SEQUENCE是否让它将序列号轮转回来变成1,NOCYCLE表示不轮转。所以主键列不设置CYCLE ⊙ CACHE和NOCACHE就是你每次在内存里预保存多少个SEQUENCE。这样,你NEXTVAL时只要从内存取就行了。这里会提高读取的效率,预计算可以减少读取时所消耗的计算资源,更大的优势是在RAC中通过预取一个比较大数量的序列号,避免多个节点访问同一块而产生PING或者内存同步产生的性能影响,减少热块。 我们看例子 有一个序列号SEQ_ACC_BANKBAT,当前值是150000,在RAC1 CACHE20000个序列号,范围为150001~170000,在RAC2上CACHE 20000个序列号,范围为170001~190000 那你在 RAC1 INSERT INTO ... SEQUENCE.NEXTVAL 是150000 RAC2 INSERT INTO ... SEQUENCE.NEXTVAL 是170000 这样连到两台节点的INSERT不会插入到同一索引块(因为索引键值是顺序的) 但是这里要注意:因为SEQUENCE预存在内存,可能存在着被PAGE OUT或者内存丢失. ⊙ ORDER和NOORDER 这个参数表示我的SEQUENCE必须是连续的 那如前面C

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档