转:
http://database.51cto.com/art/201003/191868.htm
在Oracle创建索引的实际操作中有一些限制条件。就是说表或是列建立的相关索引并不是越多越好,而是相关索引建的越多,反而会影响到Oracle数据库在运行中的整体性能,所以,在建立索引的时候,仍然会有一些限制条件。
一是不要对一些记录内容比较少的表建立索引
在一个应用系统设计的时候,如设计一个ERP系统的数据库,其虽然有几千张表。但是,并不是每张表都有大量记录的。相反,其中有近一半左右的数据表,可能其存储的数据不会超过百条。如员工登陆帐户密码表、企业部门信息表等等。对于这些记录内容比较少的表,我们建立最好不要为其建立索引。无论是表上的,还是字段上,都不要Oracle建立索引。
二是若表中的内容比较大
但是,这个表基本上不怎么查询的时候,则只需要在表上建立索引即可;而不需要在字段上建立索引。如现在在ERP系统中,有一张表是“AD_Table”。其存储的是这个数据库中相关表的信息。这张表只有在数据库设计的时候才会用到。故这张表中的记录虽然比较多,但是由于用户用的比较少,所以,一般没有必要为这张表建立列级别上的索引。而直接用表索引来代替。
三是在一些NULL字段上
要根据实际情况来判断是否要建立索引。如现在有一张人事档案的表格,其上面有两个字段,分别为“身份证号码”与“地区”。有时会为了某个原因,企业需要所有员工都在系统中登记他们的身份证号码,以方便他们办工资卡、社会保险等等。所以人事管理可能需要经常的查询系统,看看有没有没有身份证号码的员工信息。
此时,就需要利用条件“IS NULL”来查询我们所需要的记录。故为了提高查询效率,若某个记录可能为空,并且经常需要以NULL为条件进行查询的时候,则最好给这个字段添加一个索引,并且最好建立位图索引。相反,若虽然可能会以NULL这个条件作为查询的限制语句,但是,用的不是很多的时候,则就没有必要为其建立索引。
建议三:多表连接查询的索引设计
如现在有一个人事管理系统。人事经理想知道员工的社保缴纳情况。他需要知道员工的姓名、职务、户籍性质(农民户口跟居民户口费用不一样)、缴纳的情况等等。但是,这些信息包含在不同的表中。因为为了提高Oracle数据库的性能,在表中存储的可能只是某些序号,而不是具体的内容。
如在社保表中,存储的是员工对应的编号,而不是员工的名字。所以,要得到这份报表的话,就可能需要关联员工基本信息表、公司组织结构表等表格,才能够查询到用户所需要的内容。为此,就需要利用Join语句,把这些表格关联起来。为了提高数据库的查询效率,这些用来关联的字段,最好能够建立索引。这可以显著的提高查询的速度。
建议四:在表的更新速度与查询速度之间寻求一个平衡点
众所周知,索引本身并不影响数据库的使用,其主要是为了提高Oracle数据库的查询效率。但是,由于当数据库的表中的数据更新的时候,包括记录的增加、删除、更改等等,都会对虽有的索引进行更新。
很明显,索引虽然可以提高查询速度。但是,也会对一些表的更新操作产生不良的影响。当在表中建立的索引越多,这个不利影响也会越大。故Oracle数据库管理员在设置索引的时候,还需要注意,在这两个之间需要一个均衡点。
按照一般的理论来说,当某个表多数用来查询、更新相对来说比较上的话,则要多多采用索引。相反,当某个表记录更新居主导,查询相对来说比较少的话,则不要建立太多的索引,避免对更新的速度差生不利影响。在实际工作中,若某个表频繁的被视图所调用的话,则最好就好设置比较多的索引了。
分享到:
相关推荐
在Oracle数据库管理系统中,创建表和唯一索引是数据库设计中的关键步骤,它们对于数据的组织、查询效率和数据完整性至关重要。以下将详细介绍如何创建学员信息表,创建唯一索引,以及如何修改表来添加主键和检查约束...
1. 复合索引:如果多个列常一起出现在查询条件中,可以创建复合索引。 2. Covering索引:包含查询所需所有列的索引,可以避免回表操作,提高查询速度。 3. 分区索引:在大型表上使用,通过分区减少索引的扫描范围。 ...
例如,在Oracle 9i版本之前,如果一个组合索引的第一个列没有出现在WHERE子句中,那么Oracle将无法利用这个索引来加速查询。具体来说,假设有一个表`emp`,其中包含一个由`empno`、`ename`和`deptno`三个列组成的...
综上所述,Oracle索引优化涉及到对不同索引类型的理解,以及在实际查询中的合理运用。通过避免上述限制因素,可以更有效地利用索引,提高查询性能。在设计和优化索引时,需要根据数据分布、查询模式以及业务需求综合...
### Oracle索引类型详解 #### 一、B\*Tree索引:数据检索的基石 在Oracle数据库中,B\*Tree索引是最常见的索引结构,也...在实际应用中,根据数据特性和查询模式选择合适的索引策略,是Oracle数据库优化的关键环节。
在B*树群集索引中,键指向的是群集中的成员。群集是指一组具有相同主键或...在实际应用中,设计者应根据数据特性和查询需求合理选择索引类型,兼顾查询效率和DML操作的性能,以达到最佳的系统响应时间和资源利用率。
在Oracle 10g环境中,可以创建一个系统级别的触发器,用于阻止非`SYS`用户执行`DROP TABLE`或`TRUNCATE TABLE`命令。 #### 创建触发器脚本 ```sql CREATE OR REPLACE TRIGGER TRIGGER_UNDROPTABLE BEFORE DROP OR ...
Oracle数据库是世界上最流行的数据库管理系统之一,它在企业级应用中占据着重要的地位。视图和索引是Oracle数据库中两个非常关键的概念,它们对于优化查询性能、管理数据以及提高数据安全性都至关重要。以下是对这两...
在C#中,Oracle提供了Oracle.DataAccess.Client库来操作Oracle数据库,包括LongRaw和Blob字段的转换。以下是一个简单的步骤概述: 1. **连接数据库**:使用OracleConnection类建立到Oracle数据库的连接。需要提供...
1. **索引构建**:当创建索引时,Oracle会在索引结构中存储每一条记录的关键字值及对应的ROWID。 2. **查询过程**:当执行查询时,Oracle首先访问索引,根据索引中的关键字值查找相应的ROWID,再根据ROWID获取实际的...
- 经常出现在`WHERE`子句中的列,加快条件判断速度。 五、不应建立索引列的特点 以下是不应建立索引列的特点: - 在查询中很少使用或不常参考的列,因为索引对它们不会显著提升查询速度。 - 数据值很少的列,例如...
在Oracle中对行进行操作是数据库管理的基础,也是开发和DBA日常工作中不可或缺的部分。 1. **插入数据**: 插入数据使用SQL的INSERT语句,如`INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);`。当插入...
- **ALTER TABLE MOVE 命令的限制**:该章节详细讨论了ALTER TABLE MOVE命令在实际应用中的局限性,以及如何规避这些限制。 - **ALTER TABLE / INDEX MOVE / REBUILD 命令**:这部分内容解释了这些命令在Oracle 9i中...
2. 表结构迁移:工具需要能够分析源数据库的表结构,包括字段名、数据类型、主键、外键、索引等,并在目标数据库中创建相应的结构。 3. 数据迁移:工具应支持大量数据的高效迁移,可能采用全量迁移或增量迁移的方式...
管理索引的原则包括:在导入数据后创建索引以避免频繁更新,只在经常检索的字段上创建索引(如果检索数据少于表的15%),并限制索引的数量以减少修改表时的额外开销。示例中通过对比创建索引前后的查询开销,可以...
在Oracle数据库管理过程中,数据文件的大小限制是一个非常重要的概念,它直接影响到数据库的性能和可扩展性。本篇将详细介绍Oracle数据文件的大小限制及其背后的技术原理,帮助读者更好地理解和优化Oracle数据库系统...
9. **触发器(Trigger)**:Oracle还支持触发器,这是一种特殊的存储过程,会在特定的数据库操作(如INSERT, UPDATE, DELETE)发生时自动执行。 10. **存储过程(Stored Procedure)**:对于重复性的复杂操作,可以...
### Oracle 临时表用法详解 #### 一、背景与问题描述 在处理数据库操作时,经常遇到因数据量庞大而导致处理效率降低的问题。...同时,需要注意Oracle临时表的一些局限性,以便在实际应用中做出合理的决策。
例如,在文档中,大量插入数据后,如果频繁进行更新操作,未创建索引可能会更高效,因为避免了更新索引的成本。 此外,索引的类型和设计也会影响查询性能。单列索引、复合索引、唯一索引和非唯一索引都有其适用场景...
在Oracle数据库中,创建索引可以使用`CREATE INDEX`命令,如: ```sql CREATE INDEX idx_bname ON Book (B_name); CREATE UNIQUE INDEX idx_namesex ON Reader (r_name, r_sex); ``` 最后,我们通过Oracle企业管理器...