通过外连接提高SQL性能
来源:未知 责任编辑:责任编辑 发表时间:2014-02-02 17:50 点击:次
数据库使用:通过外连接提高SQL性能
1、现象、问题描述
select CID from v_contents a where a.spid like '%' and a.type=98 and a.updateflg = '0' and a.curstatus='5'
and a.cid not in
(select distinct b.fieldvalue from v_contentdatavisual_zh b, v_contents c
where c.type=1 and c.updateflg!='2' and b.cid=c.cid and b.fieldid like 'download_onlineServiceID'
and b.fieldvalue is not null)
2、关键过程、根本原因分析
使用NOT IN 操作时执行计划如下:
SQL> @?/rdbms/admin/utlxpls
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes
| Cost |
| 0 | SELECT STATEMENT | | |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
| |
| 1 | FILTER | | |
| |
| 2 | TABLE ACCESS FULL | CONTENTS | |
| |
| 3 | TABLE ACCESS BY INDEX ROWID| CONTENTDATAVISUAL_ZH | |
| |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
| 4 | NESTED LOOPS | | |
| |
| 5 | TABLE ACCESS FULL | CONTENTS | |
| |
| 6 | INDEX RANGE SCAN | PK_CONTENTDATAVISUAL_ZH | |
| |
NOT IN的操作即使字段上有索引执行计划也会造成全表的扫描,因为NOT 的值并没有记录在索引中,所以上述SQL要执行7分多种。
修改SQL:
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>