网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.oracle中解决汉字无法显示、输入.
.Oracle 10g最佳20个新特性(1).
.解决表空间填充满时出现的ORA-16.
.Linux 网管 123 --- 升级 Linux.
.ERwin相关概念快速入门.
.转贴 oracle的调优.
.ORACLE性能调优遵循的基本原则.
.Oracle数据库字符集问题解析.
.Oracle 10G Beta版在Win2000上安.
.ORA FAQ 性能调整系列之——压缩.
.配置redhat linux 7.0中的xinetd.
.Oracle 50个具有决定意义的重大事.
.编译存储过程时出现ora-04021错误.
.检查SQL语句是否应用了索引.
.Oracle发布10gR2 Patchset 2 版本.
.Oracle组件实现动态Web数据库.
.ORACLE中的物化视图.
.一起学习在linux下使用汇编语言(.
.Oracle数据库技术(25).
.Oracle FAQ 之构架体系篇.

学会将SYS_GUID和序列作为主关键字

发表日期:2008-2-9



  Oracle8i引入了SYS_GUID这个概念,它同Oracle治理员所使用的传统的序列(sequence)相比具有诸多优势。一个序列生成器只是简单地创建从给定的起点开始的一系列整数值,而且它被用在选择陈述式的时候自动地递增该系列。
  
  序列生成器所生成的数字只能保证在单个实例里是唯一的,这就不适合将它用作并行或者远程环境里的主要害字,因为各自环境里的序列可能会生成相同的数字,从而导致冲突的发生。SYS_GUID会保证它创建的标识符在每个数据库里都是唯一的。
  
  此外,序列必须是DML陈述式的一部分,因此它需要一个到数据库的往返过程(否则它就不能保证其值是唯一的)。SYS_GUID源自不需要对数据库进行访问的时间戳和机器标识符,这就节省了查询的消耗。
  
  create table use_seq_table(id integer);
  create sequence use_seq_sequence;
  insert into use_seq_table values (use_seq_sequence_value.nextval);
  
  REM - for some reason, the documentation uses raw(32)
  create table use_guid_table(id raw(16));
  insert into use_guid_table(sys_guid());
  
  很多应用程序都依靠序列生成器来创建数据行的主要害字,这些数据行没有一个明显的主值,这也就是说,在这样的数据集里一条记录的创建就会让数据列发生改变。因此,治理员可能会对在表格中将SYS_GUID用作主要害字而不使用序列数感爱好。这在对象在不同机器的不同数据库里生成以及需要在后来合并到一起的情况下很有用。
  
  但是,SYS_GUID所生成的值是一个16位的原始值。序列所生成的整数不会使用16位(的值),除非它达到了10的30次方(每个字节有两位),而且数字是相当独特的:
  
  SQL> select dump(123456789012345678901234567890) from dual;
  
  DUMP(123456789012345678901234567890)
  --------------------------------------------------------------
  Typ=2 Len=16: 207,13,35,57,79,91,13,35,57,79,91,13,35,57,79,91
  
  较短的值就意味着用于表格和索引的存储空间更少,以及查询访问的时间更短。
  
  使用SYS_GUID或者序列会在数据库使用周期里的某些地方造成性能上的消耗;问题就是在哪里。对于SYS_GUID而言,性能上的影响在查询时间和创建时间上(在表格里要创建更多的块和索引以容纳数据)。对序列而言,性能上的影响在查询期间,在这个时候,SGA序列的缓冲区被用光。在缺省情况下,一个序列一次会缓冲20个值。假如数据库没有使用这些值就关闭了,它们就会被丢失。
  
  SYS_GUID生成的值的另一个显著的不足之处是,治理这些值会变得困难得多。你必须(手动)输入它们或者通过脚本来填充它们,或者将它们作为Web参数来传递。
  
  出于这些原因,将SYS_GUID作为一个主要害字不是一个很好主意,除非是在一个并行的环境里或者希望避免使用治理序列生成器的情况下。
上一篇:获得SQL表述式的详细信息 人气:563
下一篇:Oracle10g SQL*PLUS 的一些特性 人气:654
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐