SQL优化经典案例----让in/exists子查询作为驱动表
2015-05-20 17:14
477 查看
SQL优化经典案例----让in/exists子查询作为驱动表
---http://blog.sina.com.cn/s/blog_61cd89f60102efam.html在NL连接方式中,用小表或小的结果集作业驱动表,是提高SQL执行效率的重要因素之一,下面我们看一下让in/exists子查询作为驱动表优化的案例
select rowid rid
from its_car_pass7 v
where 1 = 1
and pass_datetime >=
to_date('2013-07-06 :17:46:04', 'yyyy-mm-dd hh24:mi:ss')
and pass_datetime <=
to_date('2013-07-06 :18:46:06', 'yyyy-mm-dd hh24:mi:ss')
and v.pass_device_unid in
(select unid
from its_base_device
where dev_bay_unid in ('01685EFE4658C19D59C4DDAAEDD37393')
and dev_type = '1'
and dev_chk_flag = '1'
and dev_delete_flag = 'N')
order by v.pass_datetime asc
Execution Plan
Predicate Information (identified by operation id):
---------------------------------------------------
5 - access("PASS_DATETIME">=TO_DATE(' 2013-07-06 17:46:04', 'syyyy-mm-dd hh24:mi:ss') AND
"PASS_DATETIME"<=TO_DATE(' 2013-07-06 18:46:06', 'syyyy-mm-dd hh24:mi:ss'))
filter("PASS_DATETIME">=TO_DATE(' 2013-07-06 17:46:04', 'syyyy-mm-dd hh24:mi:ss') AND
"PASS_DATETIME"<=TO_DATE(' 2013-07-06 18:46:06', 'syyyy-mm-dd hh24:mi:ss'))
6 - access("V"."PASS_DEVICE_UNID"="UNID")
7 - filter("DEV_BAY_UNID"='01685EFE4658C19D59C4DDAAEDD37393' AND "DEV_TYPE"='1' AND
"DEV_DELETE_FLAG"='N' AND "DEV_CHK_FLAG"='1')
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
110973 consistent gets
0 physical reads
0 redo size
47861 bytes sent via SQL*Net to client
1656 bytes received via SQL*Net from client
105 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1560 rows processed
查看outline部分信息
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY(NULL, NULL, 'ADVANCED -PROJECTION'));
Outline Data
-------------
SQL优化后:
select
rowid
rid
from its_car_pass7 v
where 1 = 1
and pass_datetime >=
to_date('2013-07-06 :17:46:04', 'yyyy-mm-dd hh24:mi:ss')
and pass_datetime <=
to_date('2013-07-06 :18:46:06', 'yyyy-mm-dd hh24:mi:ss')
and v.pass_device_unid in
(select unid
from its_base_device
where dev_bay_unid in ('01685EFE4658C19D59C4DDAAEDD37393')
and dev_type = '1'
and dev_chk_flag = '1'
and dev_delete_flag = 'N')
order by v.pass_datetime asc
优化后执行计划信息
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
18645 consistent gets
130 physical reads
0 redo size
47861 bytes sent via SQL*Net to client
1657 bytes received via SQL*Net from client
105 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1560 rows processed
优化效果还是不错的,逻辑读有原有的 110973 变为:18645
相关文章推荐
- SQL优化经典案例----树形查询优化
- 帮盖尔优化SQL-----子查询优化的经典案例
- 帮盖尔优化SQL-----子查询优化的经典案例
- MySQL SQL优化案例:相关子查询(dependent subquery)优化
- SQL优化经典案例----RLS(ROW LEVEL SECURITY)
- SQL优化 · 经典案例 · 索引篇
- SQL优化经典案例----RLS(ROW LEVEL SECURITY)
- 通过手动创建统计信息优化sql查询性能案例
- SQL优化 查询语句中,用 inner join 作为过滤条件和用where作为过滤条件的区别
- SQL优化经典案例----外连接where条件位置优化
- SQL优化经典案例----外连接where条件位置优化
- sql优化案例:oracle子查询的or 转为 union all以提升查询效率
- 通过手动创建统计信息优化sql查询性能案例
- SQL优化经典案例----消除CONCATENATION
- 一个跨库复杂查询的SQL优化的案例
- SQL优化经典----子查询优化
- 因为涉及到泄密问题,个人博客上SQL优化部分的很多经典案例被删除
- 因为涉及到泄密问题,个人博客上SQL优化部分的很多经典案例被删除
- 经典案例:如何优化Oracle使用DBlink的SQL语句
- oracle常用经典SQL查询