如何提升Oracle数据库搜索效率
需要用索引来解决,索引的创建规则如下:
1、表的主键、外键必须有索引;
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
8、频繁进行数据操作的表,不要建立太多的索引;
9、删除无用的索引,避免对执行计划造成负面影响;
以上是一些普遍的建立索引时的判断依据。一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。
几点关键的东西:
1 好的数据库结构可以提高的效率是你难以想象的,所以在做数据库设计的时候就需要做好这方面的考虑,这是基础,需要考虑表的大小,结构,访问频率,以及表之间的相关性,提个建议,除开主键之外最好不要做过多的约束,比如外键啊之类的,强烈建议不使用,通过业务逻辑来控制。
2 对于访问量大的表,或者数据量大的表,建议做分表,分表的方法很多,这里不赘述了,通过结构和业务逻辑来实现性能的优化。
3 尽量使用索引查询,就是无法直接查询到,也可以通过索引字段做约束条件缩小查询范围,比如通过PLSQL的查询计划就可以看到SQL语句的执行情况。
4 数据库设计的时候,要根据实际情况来做,不建议墨守成规的按照什么BC范式啊,4级范式之类的来搞,比如China Mobile的数据库基本就能达到一级范式的标准,所以要根据你的需求来设计,比能扫一次表就可以完成的数据库操作,你就没必要把表拆分成2个表,经验积累起来就有想法了,这个几句话说不清楚的。
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐