有些新手在Oracle数据库中创建索引时往往不会使用可选项。其实,有时候在合适的场合使用一些可选项,可以提高索引的创建速度。如为了大批量导入数据,我们往往会先取消索引其以提高插入的速度。然后等数据导入完毕后再重新创建索引。在这个过程中如果能够采用一些可选项,则可以缩短索引创建的时间。在Oracle数据库中提供了丰富的可选项。我们常用的可选项主要有以下这些。
可选项一:NOSORT,记录排序可选项
默认情况下,在表中创建索引的时候,会对表中的记录进行排序,排序成功后再创建索引。但是当记录比较多的是,这个排序作业会占用比较多的时间,这也就增加了索引建立的时间(排序作业是在索引创建作业中完成)。有时候,我们导入数据的时候,如采用insert into 语句插入数据过程中同时采用Order by子句对索引字段进行了排序。此时如果在索引创建过程中再进行排序的话,就有点脱裤子放屁,多此一举了。为此在重新创建索引时,如果表中的数据已经排好序了(按索引字段排序),那么在创建索引时就不需要为此重新排序。此时在创建索引时,数据库管理员就可以使用NOSORT可选项,告诉数据库系统不需要对表中当记录进行重新排序了。
采用了这个选项之后,如果表中的记录已经按顺序排列,那么在重新创建索引的时候,就不会重新排序,可以提高索引创建的时间,节省内存中的排序缓存空间。相反,如果表中的记录是不按索引关键字排序的话,那么此时采用NOSORT关键字的话,系统就会提示错误信息,并拒绝创建索引。所以在使用NOSORT可选项的时候,数据库管理员尽管放心大胆的使用。因为其实在不能够使用这个选项的时候,数据库也会明确的告知。为此其副作用就比较少,数据库管理员只需要把这个可选项去掉然后重新执行一次即可。不过这里需要注意的是,如果表中的记录比较少的话,那么使用NOSORT选项的效果并不是很明显。当采用insert into批量导入数据,并在这个过程中采用了Order by子句对索引关键字进行了排序的话,则此时采用NOSORT选项的话,往往能够起到比较好的效果。
可选项二:NOLOGGING,是否需要记录日志信息
在创建索引的时候,系统会把相关的信息存储到日志信息中去。如果表中的记录比较多,则需要一一的把这些信息记录到日志文件中,这显然会让数据库增加很大的工作量。从而增加索引创建的时间。为此在创建索引的过程中,如果有必要时,我们可以采用NOLOGGING选项,让数据库在创建索引的过程中,不产生任何重做日志信息。此时当表中的记录比较多时,就可以明显提高速度。
但是默认情况下,数据库在在创建索引时,是不采用这个选项的,即会把相关的信息保存到重做日志中去。这虽然降低了索引创建的效率,但是如果遇到什么意外的话,却可以利用重做日志来进行恢复。所以,此时数据库管理员就比较难以抉择了。一方面是数据的安全,另一方面是索引创建的速度。根据笔者的经验,只要数据库服务器比较稳定,而数据库中约束机制又比较完善的话,那么在创建索引的过程中一般不会出现问题,可以放心大胆的使用这个可选项。
但是如果数据库已经使用了好几年了。后来因为某种原因需要重建索引。在这种情况下,由于数据库使用过程中很多因素数据库管理员无法控制。此时为这种类型的数据库创建索引时,为了保险起见还是不要采用这个选项好。因为此时遇到错误的几率相对来说会搞一点。为此此时牺牲一下索引创建的速率,而提高数据的安全性还是有必要的。万一遇到什么问题时,可以通过重做日志来及时的恢复数据,为企业用户减少损失。
可选项三:COMPUTE STATISTICS,是否生成统计信息
如果管理员在创建索引时采用了这个选项,则数据库将在创建索引的过程中以非常小的代价直接生成关于索引的相关统计信息,然后把这些信息存储在数据字典中。这就可以避免以后对索引进行分析统计,而且优化器在优化SQL语句的时候可以随机使用这些统计信息,以确定是否生成使用该索引的执行计划。通常情况下,在生成索引的过程中统计索引的相关信息,其所花的代价是最小的。无论从时间上,还是从硬件资源的耗费上,都是非常小的。所以,在创建索引的过程中统计相关的索引信息是非常有用的。
但是默认情况下,数据库是不采用这个选项的。这主要是因为一些事物处理系统,索引的信息是经常需要发生变化的。如果在索引创建的过程中统计了相关信息。这些信息随着索引的调整等等原因会很快的过时。所以说,其在默认情况下没有采用这个选项。可见这个选项并不是在任何情况下都能够起到效果。但是如果这个数据库系统是一个决策支持系统。其数据、索引等等在一段时间内基本上是稳定不变的。此时在创建索引时可以使用这个选项。如此的话,在生成索引时可以以最小的代价生成这些统计信息,方便优化器使用。笔者在部署数据库应用的时候,对于事务型的数据库系统,一般不会启用这个选项。但是对于一些决策性的数据库系统或者数据仓库中,创建索引时则笔者喜欢采用这个选项。这有助于提高数据库的性能。因为优化器在生成执行计划时,可以直接采用这个统计信息。所以,数据库能够在最短的时间内确定需要采用的执行计划。而且在执行计划制定中参考了这个索引统计信息,为此所生成的执行计划在同等条件下可能更加的合理。
可选项四:ONLINE,DML操作与创建索引操作是否可以同时进行
默认情况下,数据库系统是不允许DML操作与创建索引的操作同时进行的。也就是说,在创建索引的过程中,是不允许其他用户对其所涉及的表进行任何的DML操作。这主要是因为对基础表进行DML操作时,会对基础表进行加锁。所以在基础表上的DDL事务没有递交之前,即没有对基础表进行解锁之前,是无法对这基础表创建索引的。反之亦然。显然此时数据库没有采用这个ONLIE选项,继之DML操作与创建索引操作同时进行,主要是从创建索引的效率出发的。防止因为两个作业相互冲突,从而延长某个作业的运行时间。
但是有时会我们必须允许他们进行同时操作。如用户可能一刻都不能够离开数据库系统,需要时时刻刻对数据库基础表进行DML操作。而此时由于某些原因,数据库管理员又需要重新建立索引时,那么不得不在创建索引的语句中加入这个ONLINE选项。让他们同时运行。此时虽然可能会延长索引创建作业的时间,但是可以保障用户DML操作能够正常进行。有时候牺牲这个代价是值得的。用户是不能够等的,而我们数据库管理员则可以勉强的等一会儿。
当然,如果用户对于这个DML操作及时性没有这么高。如数据库管理员在晚上员工没有使用数据库时创建索引时,则可以不带这个选项。在限制用户对基础表进行DML操作的同时,提高数据库创建索引的效率。
可选项五:PARALLEL,多服务进程创建索引
默认情况下,Oracle数据库系统不采用这个选项。这并不是说这个选项不可用,而是因为大多数情况下企业部署Oracle数据库时所采用的数据库服务器往往只有单个CPU。此时数据库系统是用一个服务进程来创建索引的。
如果企业的服务器有多个CPU的话,则可以在创建索引时采用这个选项。因为只要采用了这个选项,则数据库就会使用多个服务进程来并行的创建索引,以提高索引创建的速度。为此,在同等条件下,多服务并行创建进索引并单服务创建索引速度要快的多。所以如果服务器中有多个CPU,而且需要创建的索引比较多或者基础表中记录比较多的话,则采用这个选项能够大幅度的提高索引的创建效率。
故笔者建议,如果采用多CPU的服务器时,最好在创建索引时使用这个选项。不能够浪费了服务器的CPU呀。不然的话,多CPU服务器的优势就体现不出来了。为此采用这个选项,也是物尽其用。希望本文讲到的内容对大家能有所帮助。
分享到:
相关推荐
在我们深入探讨Oracle新手DBA入门的各个方面之前,让我们先来了解一些基础知识。数据库是存储数据的一种方式,它们通常被分为三种基本类型:层次式数据库、网络式数据库和关系式数据库。关系式数据库是目前最常见的...
以下是一些Oracle入门的重要知识点: 1. **用户管理**:在Oracle中,`USER`是数据库的一个关键概念,用于区分不同的数据库用户。你可以通过`SELECT USER FROM DUAL;`来查看当前登录的用户。`ALTER USER`命令用于...
以下是一些Oracle新手入门的知识点: 1. **安装与配置**: 首先,你需要下载并安装Oracle数据库软件,如Oracle Database Express Edition (XE) 或其他版本。安装过程中会涉及到环境变量设置、监听配置和数据库实例...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,对于新手来说,了解其基本的SQL语法和操作是入门的关键。本文将详细解析Oracle中的数据定义语言(DDL)和一些基础概念。 首先,我们来看创建表的语句。在...
### Oracle新手入门指导之六——Oracle回收站详解 #### 回收站概念介绍 在Oracle数据库中,**回收站(Recycle Bin)**是一项非常实用的功能,它为用户提供了一种安全删除对象的方式。当用户删除一个表、视图、索引等...
还会讲解SQL语言在Oracle中的应用,如何创建、修改和查询数据库对象,如表、索引、视图和存储过程。 其次,DBA进阶知识包括性能优化、备份恢复、安全性管理和高可用性解决方案。性能优化是DBA日常工作中重要的一环...
### Oracle新手入门指导之一——数据库表空间知识 #### 数据库表空间基础知识 在Oracle数据库管理中,表空间(Tablespace)是逻辑存储结构中的一个重要概念。表空间由一个或多个数据文件组成,用来存储数据库对象...
本文将从Oracle的基本SQL语法入手,重点介绍数据定义语言(DDL)的相关知识,包括创建表、复制表、创建索引、创建同义词以及修改表等。 1. 创建表 创建表是数据库设计的基础,通过`CREATE TABLE`语句定义表结构。在...
总而言之,Oracle编程入门经典是一本全面介绍Oracle数据库基础知识和编程实践的教程,无论你是初次接触Oracle的新手还是希望巩固基础的开发者,都能从中受益匪浅。通过学习和实践,你将能够熟练地在Oracle环境中编写...
2. 分区技术:了解分区表和索引分区,如何通过分区减少数据扫描提高查询速度。 3. 资源管理:设置PGA和SGA,理解ASM(Automatic Storage Management)自动存储管理,使用ASM和ASM实例优化存储性能。 七、高可用性与...
首先,Oracle DBA入门阶段,书中可能涵盖了Oracle数据库的基础知识,包括数据存储结构、SQL语言基础、数据库实例和进程、数据库创建与管理等。这些内容是理解Oracle运作机制的关键,对于初学者来说,是建立扎实基础...
在入门阶段,你需要学习如何在不同的操作系统上安装Oracle 9i,包括Windows、Linux或Unix等。这涉及到配置环境变量、创建数据库实例、设置监听器等步骤。Oracle Universal Installer是主要的安装工具,它简化了安装...
Oracle数据库系统是...综上所述,"Oracle11g从入门到精通"这本书将涵盖以上所有内容,帮助新手逐步掌握Oracle数据库的使用。通过深入学习和实践,你将能够熟练地管理和维护Oracle数据库,为职业生涯打下坚实的基础。
这两本PDF入门文档,"Oracle经典教程(推荐)"和"Oracle经典教程(入门到精通很详细)",无疑是初学者踏入Oracle世界的好帮手。以下是这些教程可能涵盖的一些关键知识点: 1. **Oracle简介**:首先会介绍Oracle数据库的...
5. **索引**:索引能显著提高数据检索速度。Oracle 9.0支持B树、位图等多种类型的索引,理解其工作原理和使用场景是提升数据库性能的关键。 6. **触发器**:触发器是自动执行的数据库操作,可以用来实施复杂的业务...
"Oracle的入门心得"PDF文件应包含这些基础知识的详细讲解,通过阅读和实践,新手可以快速建立起对Oracle数据库的全面认识。在学习过程中,不断积累经验,站在前人的肩膀上,你的视野会更加开阔,技术也会日益精进。
总的来说,这个"Oracle从入门到精通"视频课程是一条全面的学习路径,无论你是数据库新手还是希望提升技能的专业人士,都能从中受益。通过系统学习,你可以逐步掌握Oracle数据库的核心技术和最佳实践,为你的IT职业...
总之,《深入浅出Oracle:DBA入门、进阶与诊断案例》是一本全方位的Oracle DBA指南,无论你是刚刚接触Oracle的新手,还是寻求提升技能的资深DBA,都能从中受益匪浅。通过阅读和实践书中的内容,你将能够掌握Oracle...
- 索引(Index):提高数据查询速度的结构,可快速定位到表中的特定行。 2. **SQL语言**: - SELECT语句:用于从表中检索数据。 - INSERT语句:将新数据插入到表中。 - UPDATE语句:修改现有表中的数据。 - ...
"Oracle数据库入门.ppt"文件可能包含了以上这些概念的详细介绍,通过学习这个PPT,新手可以逐步了解Oracle的基本操作、SQL语法、数据库管理、安全性和性能调优等方面的知识。随着理解的深入,你将能够熟练地创建和...