SQL性能优化系列学习1

SQL性能优化系列学习1
您正在研究的Oracle过程是Oracle SQL性能优化系列。
1。选择合适的Oracle优化器

有3种优化Oracle:

规则(基于规则)B成本(成本)C。选择(选择性)

默认的优化器可以用来申报各类在init.ora文件optimizer_mode参数,如规则、成本、选择、all_rows,first_rows。还可以在sql子句级别或会话级别上覆盖它们。

为了使用基于成本的优化器(CBO,基于成本的优化器),必须定期运行分析命令,以提高数据库中对象统计的准确性。

如果数据库优化器模式被设置为有选择(选择),那么实际的优化器模式将与是否已经运行了分析命令有关。如果通过分析传递表,优化器模式将自动成为CBO,否则,数据库将使用规则表单优化器。

默认情况下,Oracle采用选择优化器。为了避免不必要的全表扫描,您必须避免使用选择优化器,并采用基于规则的或基于成本的优化器。

2。访问表

Oracle使用两个访问表记录的方式。

A.全表扫描

完整的表扫描是对表中每个记录的顺序访问。Oracle一次读取多个数据块(数据库块)来优化全表扫描。

B.通过ROWID访问表

你可以使用基于rowid访问模式提高访问表的效率,ROWID包含物理位置信息记录表中的Oracle索引(索引)来实现数据和存储数据的物理位置(rowid)。指标之间的关系通常提供了一个快速的方法来访问的rowid,所以索引查询可以基于性能的改善。

三.共享SQL语句

为了避免重复解析SQL语句,这是Oracle分析中第一次将SQL语句存储在内存中。它位于系统全局区域,内存中共享池(共享缓冲池)的SGA(系统全局区域)可以由数据库的所有用户共享。因此,在执行SQL语句(有时称为游标)时,如果在执行相同语句之前,Oracle可以快速获得已解析的语句和最佳执行路径。Oracle的功能极大地提高了SQL性能,节省了内存使用量。

不幸的是,Oracle仅为简单表提供缓存缓冲,而这并不适用于多表连接查询。

数据库管理员必须在init.ora中的区域的相应参数。当内存区域较大时,可以保留更多语句,共享的可能性更大。

当您向Oracle提交SQL语句时,Oracle将首先在这个内存中查找同一语句。

这里需要注意的是,Oracle对于两者都是严格匹配的,为了实现共享,SQL语句必须完全相同(包括空格、银行等)。

共享语句必须满足三个条件:

字符级比较:

当前执行的语句和共享池中的语句必须完全相同。

例如:

从EMP中选择*;

它与下面的每一个不同

从EMP中选择*;

从EMP中选择*;

从EMP中选择*;

两个语句中的对象必须完全相同:

例如:

用户对象名称是如何访问的

杰克sal_limit私有同义词

work_city公共同义词

plant_detail公共同义词

吉尔sal_limit私有同义词

work_city公共同义词

plant_detail表的所有者

考虑以下两个SQL语句是否可以在两个用户之间共享。

SQL是否可以共享以及为什么

选择最大(sal_cap)从sal_limit;

不,不,每个用户都有一个私人的同义词sal_limit,这是一个不同的对象

select count(* 0 work_city哪里sdesc like'new %;

可以。两个用户访问同一对象的公共同义词work_city

Select a.sdesc, b.location from work_city a, plant_detail b where a.city_id = b.city_id

不,no. User Jack访问plant_detail通过私有同义词,和姬尔是表的所有者,和对象是不同的。

C.两个SQL语句必须使用同一个名称绑定变量(绑定变量)

例如:

第一组的两个SQL语句是相同的(可以共享)和两个语句,第二组是不同的(即使在运行时,具有相同变量绑定的不同值)

{分页}
A.

选择引脚,从人民那里销=名称:blk1.pin;
选择引脚,从人民那里销=名称:blk1.pin;

B.

选择引脚,从人民那里销=名称:blk1.ot_ind;
选择引脚,从人民那里销=名称:blk1.ov_ind;

上一页

tag:学习性能优化系列电脑软件SQL

相关内容