优化拥有谓词or的子查询

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 20:28 点击:

于节点2上发现一个sql,其结构如下:
select distinct t.attr, t.item
from a t
where attr = :1
  and (pro = :2 or exists
       (select 1
          from b hps
         where hps.pro = :3
           and t.pro = hps.sub_pro))
鉴于以往的经验,一开始就觉得子查询中的连接谓词or有问题。
注:
表a有50多万条记录,attr和pro上分别有索引;表b有10万条记录,pro上有单独索引,同时(pro,sub_pro)组成unique索引;
同时表a上的attr,pro字段的分布情况如下,对于表a,pro字段的选择性比attr高出了很多
SQL> select count(distinct pro),count(distinct attr) from a;

COUNT(DISTINCT pro)           COUNT(DISTINCT attr)
------------------------- ---------------------------
          164067                         716
          

先通过set autotrace traceonly查看一把其执行计划和consistent gets
--------------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name                   | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |                        |    63 |   945 |    83   (2)| 00:00:01 |
|   1 |  HASH UNIQUE                  |                        |    63 |   945 |    83   (2)| 00:00:01 |
|*  2 |   FILTER                      |                        |       |       |            |          |
|   3 |    TABLE ACCESS BY INDEX ROWID| a                      |  1268 | 19020 |    82   (0)| 00:00:01 |
|*  4 |     INDEX RANGE SCAN          | idx_a_attr             |  1268 |       |     8   (0)| 00:00:01 |
|*  5 |    INDEX UNIQUE SCAN          | idx_b_un_pro_sub       |     1 |    12 |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------

Pr

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

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

      豫ICP备11007008号-1