通过外连接提高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: 
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • sql常见面试题
  • SQL SERVER 2005性能之跟踪
  • SQL编程(一)
  • LINUX上RMAN自动备份脚本
  • sql server面试题
  • 如何将多个SQL查询统计结果一次显示出来
  • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
  • SQL小技巧系列 --- 行转列合并
  • sql server 列转行
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1