SQL性能优化系列学习1
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;
上一页