在Oracle数据库中,创建索引虽然比较简单。但是要合理的创建索引则比较困难了。笔者认为,在创建索引时要做到三个适当,即在适当的表上、适当的列上创建适当数量的索引。虽然这可以通过一句话来概括优化的索引的基本准则,但是要做到这一点的话,需要数据库管理员做出很大的努力。具体的来说,要做到这个三个适当有如下几个要求。
一、 根据表的大小来创建索引。
虽然给表创建索引,可以提高查询的效率。但是数据库管理员需要注意的是,索引也需要一定的开销的。为此并不是说给所有的表都创建索引,那么就可以提高数据库的性能。这个认识是错误的。恰恰相反,如果不管三七二十一,给所有的表都创建了索引,那么其反而会给数据库的性能造成负面的影响。因为此时滥用索引的开销可能已经远远大于由此带来的性能方面的收益。所以笔者认为,数据库管理员首先需要做到,为合适的表来建立索引,而不是为所有的表建立索引。
一般来说,不需要为比较小的表创建索引。如在一个ERP系统的数据库中,department表用来存储企业部门的信息。一般企业的部分也就十几个,最多不会超过一百个。这100条记录对于人来说,可能算是比较多了。但是对于计算机来说,这给他塞塞牙缝都还不够。所以,对类似的小表没有必要建立索引。因为即使建立了索引,其性能也不会得到很大的改善。相反索引建立的开销,如维护成本等等,要比这个要大。也就是说,付出的要比得到的多,显然违反常理。
另外,就是对于超大的表,也不一定要建立索引。有些表虽然比较大,记录数量非常的多。但是此时为这个表建立索引并一定的合适。如系统中有一张表,其主要用来保存数据库中的一些变更信息。往往这些信息只给数据库管理员使用。此时为这张表建立索引的话,反而不合适。因为这张表很少用到,只有在出问题的时候才需要查看。其次其即使查看,需要查询的纪录也不会很多,可能就是最近一周的更新记录等等。对于对于一些超大的表,建立索引有时候往往不能够达到预计的效果。而且在打表上建立索引,其索引的开销要比普通的表大的多。那么到底是否给大表建立索引呢?笔者认为,主要是看两个方面的内容。首先是需要关注一下,在这张大表中经常需要查询的记录数量。一般来说,如果经常需要查询的数据不超过10%到15%的话,那就没有必要为其建立索引的必要。因为此时建立索引的开销可能要比性能的改善大的多。这个比例只是一个经验的数据。如果数据库管理员需要得出一个比较精确的结论,那么就需要进行测试分析。即数据库管理员需要测试一下全表扫描的时间,看看其是否比建立索引后的查询时间要长或者短。如果是长的话,则说明有建立索引的必要。但是如果没有的话,则说明还是全表扫描速度来的快。此时也就没有必要建立索引了。
总之,在考虑是否该为表建立索引时,一般来说小表没有建立索引的必要。而对于打表的话,则需要进行实际情况实际分析。简单一点的,可以根据大致的比率来确定。如果要精确一点的,则可以进行全表扫描性能分析,以判断建立索引后是否真的如预期那样改善了数据库性能。
二、 根据列的特征来创建索引。
列的特点不同,索引创建的效果也不同。数据库管理员需要了解为哪些列创建索引可以起到事倍功半的效果。同时也需要了解为哪些列创建索引反而起到的是事倍功半的效果。这有利于他们了解到底给为怎么样的字段建立索引。
根据笔者的经验,往往为如下特征的列创建索引能够起到比较明显的效果。如对于一些重复内容比较少的列,特别是对于那些定义了唯一约束的列。在这些列上建立索引,往往可以起到非常不错的效果。如对于一些null值的列与非Null值的列混合情况下,如果用户需要经常查询所有的非Null值记录的列,则最好为其设置索引。如果经常需要多表连接查询,在用与连接的列上设置索引可以达到事半功倍的效果。
可见,索引设置的是否恰当,不仅跟数据库设计架构有关,而且还跟企业的经济业务相关。为此,对于一些套装软件,虽然一开始数据库管理员已经做了索引的优化工作。但是随着后来经济数据的增加,这个索引的效果会越来越打折扣。这主要是因为记录的表化影响到了索引优化的效果。所以笔者建议各位数据库管理员,即使采用的是大牌软件公司的套装软件,也需要隔一段时间,如一年,对数据库的索引进行优化。该去掉的去掉,该调整的调整,以提高数据库的性能。
如在数据库中有一张表是用来保存用户信息的。其中有个字段身份证号码,这是一个唯一的字段。在数据库设计时,给这个字段创建了索引。但是当这个数据库投入使用之后, 用户不怎么输入用户的身份证号码。而且平时也基本不按这个号码来进行查询。当记录月来月多时,这个身份证号码上的索引字段不但不能够改善数据库的查询性能,反而成了鸡肋。对于这些有很多NULL值的列,而且不会经常查询所有的非NULL值记录的列,数据库管理员要下决心,即使清除这些列上的索引。
所以说索引的优化与调整是一个动态的过程,并不是说数据库设计好之后就不需要经过调整。数据库管理员往往需要根据记录的变化情况,来进行适当的变更。以提高索引的效果。
分享到:
相关推荐
正如文档标题“Oracle创建索引要做到三个适当”所强调的,创建索引需要遵循“适当”的原则,具体包括在适当的表上、适当的列上创建适当数量的索引。以下将对这三个方面进行详细阐述,以帮助数据库管理员更好地理解...
### Oracle数据库索引的维护 在Oracle数据库管理与优化的过程中,索引的维护是非常关键的一环。合理地创建、管理和优化索引能够显著提高查询性能,降低系统的响应时间,从而提升整个应用程序的效率。本文将从Oracle...
三、影响Oracle数据库索引的几个因素 1. 选择性:选择性是指索引键的选择率,即索引键在数据表中的出现频率。选择性高的索引键可以提高查询速度。 2. 集群因子:集群因子是指索引键在数据表中的分布情况。集群因子...
数据库索引设计原则是 Oracle 数据库管理系统中的一项重要技术,旨在提高数据库的查询效率和性能。以下是数据库索引设计原则的详细解释。 一、基本原则 数据库索引设计原则的基本原则是确保数据库的查询效率和性能...
### Oracle数据库索引与SQL优化 在Oracle数据库的日常管理和维护过程中,索引与SQL语句的优化是非常重要的环节。合理的索引设计和高效的SQL编写能够显著提高数据查询的速度、减少系统资源消耗,并最终提升整个...
总结,Oracle数据库设计与优化是一个涉及多方面知识的复杂过程,包括但不限于物理结构设计、SQL优化、索引策略、存储过程使用、性能监控以及备份恢复策略。理解这些核心概念并灵活应用,将有助于构建高效、稳定且...
安装Oracle数据库涉及选择适当的版本(如Oracle Database 12c或19c)、安装客户端和服务器组件,以及配置网络服务,如监听器和tnsnames.ora文件。理解这些步骤对于设置开发和生产环境至关重要。 四、Oracle数据库...
Oracle数据库以其高效、稳定和强大的功能在金融、电信、医疗、政府等多个领域得到广泛应用。本资料大全将围绕Oracle数据库的核心概念、管理和优化等方面进行深入探讨。 一、Oracle数据库基础 Oracle数据库系统基于...
首先,在Oracle数据库的启动过程中,三个必须的文件是数据文件、控制文件和日志文件。归档日志文件不是启动时必须的,但是它在恢复过程中是必须的。控制文件记录了数据库的物理结构信息,例如数据文件和日志文件的...
3. Oracle数据库实例的启动过程通常包括三个步骤:startup nomount(启动实例但不加载数据库)、alter database mount(挂载数据库但不打开)、alter database open(打开数据库,使其可供使用)。例如: - startup...
Oracle 数据库开发和设计规范中,命名约定是指对数据库、数据库对象如表、字段、索引、序列、存储过程等的命名约定。命名约定要求使用富有意义的英文词汇,尽量避免使用缩写,多个单词组成的,中间以下划线分割。...
一、Oracle数据库索引设计 1. B树索引:Oracle默认使用B树(B-Tree)索引,适用于等值查询。理解B树的工作原理和如何选择合适的索引宽度对于提升查询性能至关重要。 2. bitmap索引:适用于多列等值连接查询和在低...
Oracle数据库中的索引管理技术 索引是 Oracle 数据库中的一个重要对象,它可以大大提高数据库中的数据检索速度。索引是包含表中选定字段的信息的对象,这些信息以某种规律排序,有一个指针指向存放实际数据的记录。...
4. **Oracle数据库安装教程**:安装Oracle数据库涉及多个步骤,包括选择适当的版本(如Oracle Database 19c)、配置硬件和操作系统要求、下载安装文件、执行安装向导、配置网络服务、创建数据库实例等。安装过程中需...
Oracle数据库是企业级...综上所述,这款“Oracle数据库导入导出工具”提供了一个方便的界面,简化了数据库操作,尤其适合对技术不太熟悉的用户。配合详细的使用说明,用户可以更有效地管理和维护自己的Oracle数据库。
Oracle数据库是一个复杂且功能强大的关系型数据库管理系统(RDBMS),其核心组件包括实例和数据库文件。理解Oracle的体系结构对于优化性能至关重要。 - **实例**: 包括后台进程和内存结构,如共享池(Shared Pool)、...
在Oracle数据库管理中,创建合适的索引对于提高查询效率、减少数据处理时间具有重要作用。本文将围绕Oracle创建索引的基本规则进行深入探讨,旨在帮助读者更好地理解如何根据不同的场景选择合适的索引类型,并掌握...
Oracle数据库基础知识是每个IT从业者或自学者必备的知识领域。以下将深入讲解Oracle数据库的一些关键概念和操作。 一、Oracle数据库系统概述 Oracle数据库系统由Oracle公司开发,提供了一整套解决方案,包括数据库...