oracle数据库SQL优化综述

oracle数据库SQL优化综述
1:多用少用;

二:当检查多于两个表时,在右边放置较少的记录。

三:减少访问表的次数;

四:当有子查询,子查询放在前面。

五:避免在SELECT语句中使用*(执行将依次将*转换为列名);

六:尽可能多地使用提交。

七:解码可以避免重复扫描同一记录或重复同一表;

八:通过内部功能还可以提高sql的效率。

九:当连接多个表时,在每个字段上使用别名和前缀别名。

十:替换存在

十一:不存在而不是不在(不在子句中)将执行内部排序和合并。在任何情况下,不是最无效的,而是在子查询中对整个表进行扫描。为了避免不使用,它可以重写成外部连接或不存在)。

十二:表连接比现有的效率更高。

十三:替换存在

例:

低:高:

选择不同的dept_no,dept_name选择dept_no,dept_name

D部,D部EMP E

在d.dept_no = e.dept_no;存在(选择1从EMP在e.dept_no = d.dept_no);

十四:使用tkprof工具查询的SQL性能状态;

十五:提高索引效率(成本:索引需要空间,有必要重构指数规律:ALTERINDEXREBUILD < tablespacename);

首先介绍了下一个索引的原理,以便于理解索引的优化。

rowid是由指数发现,然后表通过rowid访问。但如果查询的列包含在索引,则不会执行第二操作,因为检索数据存储在索引和访问索引就可以满足查询要求。

先决条件:在十六种情况下,住宿列具有唯一的索引;管理列具有非唯一索引。

十六:索引范围查询(索引范围sacen):

适用于两种情况:

1)基于一系列查询:

从倒伏率为%的住宿处选择住宿

(WHERE子句条件包括一系列的值,Oracle将通过索引范围查询。查询lodging_pk)

2)基于非唯一索引的检索:

选择住宿的住宿的地方,经理=李';

此查询分为两步:倒伏$经理指数范围查询得到所有的rowid,符合要求,然后通过ROWID访问表倒伏列值。该指数是一个非唯一索引和数据库不能执行一个唯一索引扫描它。

在哪里的话,如果对应的索引列的值从第一个字符的通配符,索引不会被使用,它会扫描整个表,如选择…经理喜欢%李。

十七:基本表的选择:

基本表:第一个访问表(通常在一个完整的表扫描中访问)。

根据优化器的不同,SQL语句中的基表的选择是不同的。

如果使用CBO,优化器将检查SQL语句中每个表的物理大小、索引的状态,然后选择具有最低成本的路径。

如果是使用RBO,和所有连接条件指标,相应的,在这种情况下,基表中的列上表从句子

例:

选择a.name,从工人一b.manager,住宿在哪里a.lodging = b.lodging;

因为在倒伏列上有一个索引,而且在工作表中没有比较索引,所以工作表将被用作查询的基表。

十八:多重相等索引:

当SQL语句的执行路径可用于在多个表上分配多个索引时,Oracle将使用同事的多个索引,并在运行时合并其记录,以便仅检索所有索引的有效记录。

Oracle选择执行路径是唯一的索引级别高于非唯一索引,只有当索引列和WHERE语句中的常量比较有效时。如果索引列与另一个表的索引列进行比较,优化器中的语句是非常低的。

如果在不同表的同级别两指标的参考,这是第一个根据在句子中的顺序表的应用。在从句子的最后一个表的索引具有高优先级。如果在同一张桌子同级别的两个指标为参考,在哪里的句子会具有最高优先级的第一参考指标。

例如:有一个非唯一索引的表,和emp_cat具有非唯一索引。

选择从EMP在dept_no = 20和emp_cat =一个';

deptno索引将被检索的第一然后合并结果的emp_cat索引检索和执行路径如下:

通过rowid对EMP表访问

和_equal

索引范围扫描dept_idx

索引范围扫描cat_idx

十九:平等与范围比较的比较:

第一个例子:

选择从EMP在dept_no > 20和emp_cat =姓名;

(两非唯一索引的前提下)的范围是不能用在这个时候,和记录查询通过emp_cat指标并与dept_no条件相比。

注意:当比较唯一性时,水平低于非唯一索引。

二十:强制索引失败:

如果两个或两个以上索引具有相同的级别,则可以强制命令Oracle优化器使用其中一个索引,您是什么时候使用这个策略的如果一个索引接近一个索引,而另一个索引有许多重复的值,排序和合并将成为一个负担。此时,后者可以被屏蔽,索引无效。

(加+ 0或| |计算失效模式的列的索引);

tag:优化综述数据库电脑软件Oracle

相关内容