[阅读: 376] 2011-01-19 12:42:27
索引优先级
唯一性索引的等级高于非唯一性索引
同一表中有多个相同等级的索引,以WHERE子句中最先被引用的索引将有最高的优先级
同一表中有多个相同等级的索引,等式比较优先于范围比较
同表中不同等级索引有等式比较和范围比较的情况,先等式优先于范围,再高等级优先低等级
在SQL语句中,使用 /*+ */ 增加指定的优化提示,可以提高特殊SQL的性能
在10g以上的版本中,一般不建议使用
如:
select /*+ index(he,hr_employe_n1) */
…
from hr_employe he
where he.employe_number >= ’100000’
and he.employe_type = ‘职员’
index
指定使用提示中的索引
select /*+ index(he,hr_employe_n1) */ …
from hr_employe he ;
Use_hash
对指定的表执行散列连,在多表组合查询时使用
从驱动表想RAM区装载记录的方法,通常与并行查询结合使用
Select /*+ use_hash(ph,pl) */ …
from po_headers_all ph,
po_lines_all pl
where ph.po_header_id = pl.po_header_id;
Use_nl
强制对目标表执行嵌套循环连接
可以用来指定驱动表
Select /*+ use_nl(ph) */ …
from po_headers_all ph,
po_lines_all pl
where ph.po_header_id = pl.po_header_id;
Full
强制使用全表扫描
Select /*+ full(he) */ …
From hr_employe he
Where he.sex_type=‘男’
Ordered
只有在基于成本的优化器中使用
要求表按照from指定的顺序进行连接,from子句中的第一个表作为驱动表
一般与其他的提示结合使用
SELECT /*+ ordered use_hash(cce,bl) use_nl(l,h,bl2) */ .…
FROM cpm_contract_entities cce, cdm_contract_lines l, org_organization_definitions odf, cdm_contract_headers h, bas_lookups bl, bas_lookups bl2
WHERE ……