1 .优化Oracle优化Oracle优化首先是索引。 这是Oracle优化中最有效的方法
oracle优化的常见方法有几种。
1 .在需要频繁使用查询的字段中创建索引
2 .利用2.Oracle的分析方式进行数据优化。 Oracle的分析方式是自上而下、从右到左、自下而上的方式分析SQL,因此利用该原理,如果在from后面有三个以上的表连接查询,则将其他表中引用的表放在最后,在where后面有多个查询条件
3 .对于简单的查询SQL,oracle的执行顺序通常是1-from、2-where、3-group by、4-having、5-select、6-order by,所以它放在where之后
4 .使用exists查询的效率高于使用in,in的效率高于or,所以在exists中不使用in,不使用使用in的or
5 .可以使用=进行正确查询时,不要使用like这样的模糊查询。 模糊查询降低查询效率
6 .在处理大量数据时,以上效率高于以上。 例如,在相同的条件2和=3下,=3的效率比2稍高。 因为前者直接位于3,处理第三后数据,后者位于2,是从2向后推出后的第一个数据3。
使用合并代替更新。 使用merge的好处是,不需要扫描源表一次,也容易调整执行计划。 另一方面,update通常以类似于nested loop的方式在表之间进行连接,并将更新的表作为外部驱动表。 该表越大,执行效率越低。 因此,必须使用merge。
不像name is null那样在索引列上进行运算,不使用not (而不是或)来判断索引列。 如果索引列不使用null,优化程序将在不使用索引的情况下扫描所有表。
9 .如果模糊搜索通配符位于搜索词开头,则索引也无效;如果位于其他位置,则为select * fromstudentwherenamelike“% wish %”;
10 .避免使用select *,多表连接时尽量使用表和字段别名;
11 .如果可以使用truncate,则如果不使用delete,delete将生成大量日志,影响效率。
2 .索引2.1适合编制索引的特征1 )在频繁需要检索的列中,可以加快检索的速度
2 )作为主键的列强制该列的唯一性和组织表中数据的数组结构
3 )在连接中常用的列中,这些列主要是一些外键,可以加速连接;
4 )在需要根据范围搜索的列中创建索引。 因为索引已经排序,并且指定的范围是连续的;
5 )在经常需要排序的列中索引。 因为索引已经排序,所以查询可以利用索引排序来减少查询的排序时间。
6 )在WHERE子句中常用的列上建立索引,以加快条件的判断;
7 )基于某个范围的搜索,一般查询结果集适合采用小于表中记录数的30%; 基于非唯一性索引的搜索。
2.2不适合索引的特征1 )不要对查询中很少使用的列或引用的列进行索引。 这是因为这些列很少使用,因此没有索引不会加快查询的速度。 相反,由于索引增加,系统维护速度降低,空间要求增加。
2 )对于数据值少的列也不应该增加索引。 这是因为这些列的取值很少,就像人力资源表中的性别列一样。 在查询结果中,结果集中的数据行占表中数据行的很大比例。 也就是说,因为需要在表中搜索的数据行的比例很大。 增加索引不会显著提高搜索速度。
3 )不要向定义为blob数据类型的列中添加索引。 这是因为这些列的数据量相当大或值很少。
4 )修改性能远大于检索性能时,不应该编制索引。 这是因为修正性能和检索性能矛盾。 增加索引会提高搜索性能,但会降低修改性能。 减少索引会提高修改性能,降低搜索性能。 因此,如果修改的性能远远大于搜索的性能,请不要索引。
2.3索引的分类索引大致分为两种,一种是B-tree索引,另一种是位图索引(Bitmapt ),Oracle默认创建的是B-tree索引。 简而言之,两者的区别在于B-tree索引适合于生成数据差大的字段,例如名称、学校号码、位图索引适合于生成性别等数据差小的字段。 但是,在实际的业务运营中,需要根据情况判断是否使用索引,具体使用哪个索引。 例如,在一个字段sex中,他只有男性和女性,数据量相同。 建立索引后,实际上只能过滤大部分数据。 例如,如果字段is_true,则他的结果只有“是”和“否”,但“否”的数据量相对较少,因此索引始终对需要检查“否”的数据有效。
B-tree的特点:
大量添加、删除和更改(OLTP )
不能使用包含OR操作符的查询;
适合基数高的列(唯一值多) )。
典型树结构;
每个节点都是数据块
r> 大多都是物理上一层、两层或三层不定,逻辑上三层;叶子块数据是排序的,从左向右递增;
在分支块和根块中放的是索引的范围;
Bitmapt 特点:
适合与决策支持系统;
做UPDATE代价非常高;
非常适合OR操作符的查询;
基数比较少的时候才能建位图索引;
不常见的还有复合索引、函数索引、哈希索引和分区索引,复合索引也就是基于多个列创建的索引,这种索引只有在第一个列被where子句使用到时,优化器才会使用到该索引。
注:索引是把双刃剑,虽然建立索引能有效地提高查询效率,但索引也需要占大量的表空间和物理空间,后期还需要经常维护,所以建立索引要慎重选择。
2.4