在Oracle创建索引的实际操作中会出现的限制条件


  本文标签:Oracle创建

  在Oracle创建索引的实际操作中有一些限制条件  。就是说表或是列建立的相关索引并不是越多越好,而是相关索引建的越多,反而会影响到Oracle数据库在运行中的整体性能,所以,在建立索引的时候,仍然会有一些限制条件  。

  一是不要对一些记录内容比较少的表建立索引

  在一个应用系统设计的时候,如设计一个ERP系统的数据库,其虽然有几千张表  。但是,并不是每张表都有大量记录的  。相反,其中有近一半左右的数据表,可能其存储的数据不会超过百条  。如员工登陆帐户密码表、企业部门信息表等等  。对于这些记录内容比较少的表,我们建立最好不要为其建立索引  。无论是表上的,还是字段上,都不要Oracle建立索引  。

  二是若表中的内容比较大

  但是,这个表基本上不怎么查询的时候,则只需要在表上建立索引即可;而不需要在字段上建立索引  。如现在在ERP系统中,有一张表是“AD_Table”  。其存储的是这个数据库中相关表的信息  。这张表只有在数据库设计的时候才会用到  。故这张表中的记录虽然比较多,但是由于用户用的比较少,所以,一般没有必要为这张表建立列级别上的索引  。而直接用表索引来代替  。

  三是在一些NULL字段上

  要根据实际情况来判断是否要建立索引  。如现在有一张人事档案的表格,其上面有两个字段,分别为“身份证号码”与“地区”  。有时会为了某个原因,企业需要所有员工都在系统中登记他们的身份证号码,以方便他们办工资卡、社会保险等等  。所以人事管理可能需要经常的查询系统,看看有没有没有身份证号码的员工信息  。

  此时,就需要利用条件“IS NULL”来查询我们所需要的记录  。故为了提高查询效率,若某个记录可能为空,并且经常需要以NULL为条件进行查询的时候,则最好给这个字段添加一个索引,并且最好建立位图索引  。相反,若虽然可能会以NULL这个条件作为查询的限制语句,但是,用的不是很多的时候,则就没有必要为其建立索引  。

  建议三:多表连接查询的索引设计

  如现在有一个人事管理系统  。人事经理想知道员工的社保缴纳情况  。他需要知道员工的姓名、职务、户籍性质(农民户口跟居民户口费用不一样)、缴纳的情况等等  。但是,这些信息包含在不同的表中  。因为为了提高Oracle数据库的性能,在表中存储的可能只是某些序号,而不是具体的内容  。

  如在社保表中,存储的是员工对应的编号,而不是员工的名字  。所以,要得到这份报表的话,就可能需要关联员工基本信息表、公司组织结构表等表格,才能够查询到用户所需要的内容  。为此,就需要利用Join语句,把这些表格关联起来  。为了提高数据库的查询效率,这些用来关联的字段,最好能够建立索引  。这可以显著的提高查询的速度  。

  建议四:在表的更新速度与查询速度之间寻求一个平衡点

  众所周知,索引本身并不影响数据库的使用,其主要是为了提高Oracle数据库的查询效率  。但是,由于当数据库的表中的数据更新的时候,包括记录的增加、删除、更改等等,都会对虽有的索引进行更新  。

  很明显,索引虽然可以提高查询速度  。但是,也会对一些表的更新操作产生不良的影响  。当在表中建立的索引越多,这个不利影响也会越大  。故Oracle数据库管理员在设置索引的时候,还需要注意,在这两个之间需要一个均衡点  。

  按照一般的理论来说,当某个表多数用来查询、更新相对来说比较上的话,则要多多采用索引  。相反,当某个表记录更新居主导,查询相对来说比较少的话,则不要建立太多的索引,避免对更新的速度差生不利影响  。在实际工作中,若某个表频繁的被视图所调用的话,则最好就好设置比较多的索引了  。