记一次not in 和 minus的优化

优化前:
select count(t.id)
  from test t
 where t.status = 1
   and t.id not in (select distinct a.app_id
                      from test2 a
                     where a.type = 1
                       and a.rule_id in (152, 153, 154))
           
  17:20:57 laojiu>@plan

PLAN_TABLE_OUTPUT
————————————————————————————————————————-
Plan hash value: 684502086

—————————————————————————————-
| Id  | Operation           | Name             | Rows  | Bytes | Cost (%CPU)| Time     |
—————————————————————————————-
|   0 | SELECT STATEMENT    |                  |     1 |    18 |   176K  (2)| 00:35:23 |
|   1 |  SORT AGGREGATE     |                  |     1 |    18 |            |          |
|*  2 |   FILTER            |                  |       |       |            |          |
|*  3 |    TABLE ACCESS FULL| test      |  1141 | 20538 |   845   (2)| 00:00:11 |
|*  4 |    TABLE ACCESS FULL| test2 |     1 |    12 |   309   (2)| 00:00:04 |
—————————————————————————————-

Predicate Information (identified by operation id):
—————————————————

   2 – filter( NOT EXISTS (SELECT /*+ */ 0 FROM “test2” “A” WHERE
              “A”.”type”=1 AND (“A”.”RULE_ID”=152 OR “A”.”RULE_ID”=153 OR
              “A”.”RULE_ID”=154) AND LNNVL(“A”.”APP_ID”<>:B1)))
   3 – filter(“T”.”status”=1)
   4 – filter(“A”.”type”=1 AND (“A”.”RULE_ID”=152 OR “A”.”RULE_ID”=153 OR
              “A”.”RULE_ID”=154) AND LNNVL(“A”.”APP_ID”<>:B1))
Statistics
———————————————————-
          0  recursive calls
          0  db block gets
    1762169  consistent gets
          0  physical reads
          0  redo size
        519  bytes sent via SQL*Net to client
        492  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
21 rows selected.

优化后:
 select count(*) from(
 select t.id
   from test t
  where t.status = 1
 minus
 select distinct a.app_id
   from test2 a
  where a.type = 1
    and a.rule_id in (152, 153, 154))
17:23:33 laojiu>@plan

PLAN_TABLE_OUTPUT
————————————————————————————————————————-
Plan hash value: 631655686

————————————————————————————————–
| Id  | Operation             | Name             | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
————————————————————————————————–
|   0 | SELECT STATEMENT      |                  |     1 |       |       |  1501   (2)| 00:00:19 |
|   1 |  SORT AGGREGATE       |                  |     1 |       |       |            |          |
|   2 |   VIEW                |                  |  1141 |       |       |  1501   (2)| 00:00:19 |
|   3 |    MINUS              |                  |       |       |       |            |          |
|   4 |     SORT UNIQUE       |                  |  1141 | 20538 |       |   846   (2)| 00:00:11 |
|*  5 |      TABLE ACCESS FULL| test      |  1141 | 20538 |       |   845   (2)| 00:00:11 |
|   6 |     SORT UNIQUE       |                  | 69527 |   814K|  3632K|   654   (2)| 00:00:08 |
|*  7 |      TABLE ACCESS FULL| test2 | 84140 |   986K|       |   308   (2)| 00:00:04 |
————————————————————————————————–

Predicate Information (identified by operation id):
—————————————————

   5 – filter(“T”.”status”=1)
   7 – filter(“A”.”type”=1 AND (“A”.”RULE_ID”=152 OR “A”.”RULE_ID”=153 OR
              “A”.”RULE_ID”=154))

21 rows selected.
Statistics
———————————————————-
          1  recursive calls
          0  db block gets
       2240  consistent gets
          0  physical reads
          0  redo size
        516  bytes sent via SQL*Net to client
        492  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
          1  rows processed
在优化sql的时候,我们需要转变一下思路,等价的改写sql;

改写后的sql由于逻辑读得到了天翻地覆的改变,很快得到结果。

第一条sql执行计划中有一个函数,LNNVL(“A”.”APP_ID”<>:B1),lnnvl(exp)

如果exp的结果是false或者是unknown,那么lnnvl返回true;

如果exp的结果是true,返回false.

时间: 2024-10-29 20:22:07

记一次not in 和 minus的优化的相关文章

浅谈当前SEO优化中的三大纪律和八项注意

在SEO优化过程中,我们既要积极针对百度和Google采取必要的优化手段,增强网站在搜索引擎这里获得的排名和收录情况,同时更要注意优化的过程中最重要的是讲求"度",不可一味为了增强效果而把优化手段过度使用,否则只能得到适得其反的后果. 一般说来,特别是作为中文搜索引擎老大的百度,对于我们这些主要面向国内中文用户的网站而言,无疑是最重要的优化对象.要想达到预定的.更佳的优化效果,遵守百度所制定的算法规则是不二法门.结合我们所积累的经验并结合当前百度的算法规则,在当前的优化之中需要遵循以下

重量级域名fensi.com成功通过拍米网代购回国

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 粉丝一词在当今社会被用在众多的场合,比如在QQ的微博我们将收听的好友称做粉丝,在娱乐圈将明星的fans称做粉丝,更有国内著名网站粉丝网(ifensi.com)今年2月,韩国SK电信向粉丝网注资2700万美元,并将定位于青少年娱乐沟通SNS的赛我网与并入粉丝网. 据悉,该域名交易金额超过了10万美金. 这是今年继hubei.com后又一双拼域名

应用终端青睐拼音域名 未来市场潜力巨大

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断淘宝客 站长团购 云主机 技术大厅 国外的单词域名和国内的拼音域名,是国内外投资者较为喜欢的域名,其价值也在不断升涨.但相较而言,由于语言普及的关系,拼音域名的价值仍然被低估,近年来,拼音域名启用的案例不在少数,如suning.cn(苏宁) ,在金融危机时,国内域名市场仍然不断刷新域名高价成交的案例. 近日,新浪微博启用了weibo.com/.cn/.com.cn三个域

网站关键词分析与选取

要评估某个关键词的难度(能否排到前面),最好的方法是使用合适的工具.如果你在网上搜一下,你可以看到几款关键词难度分析工具(软件).选择几款,比如Seochat's Keyword Difficulty Tool,,Cached's Keyword Difficulty Tool ,Seomoz's Keyword Difficulty Tool , Off we go 等.选择多种工具的出发点并不是因为你有这么多的的自由支配时间来浪费掉.如果你只选择一种工具,你就会很快地结束你的研究,但是你需要

网站上线14天 核心关键词百度11google第3

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 网站的核心关键词是"SEO链轮",这是一个竞争度不是很高的关键词,处于百度首页的全部是一些大站的内页,在百度的搜索量是"85500"篇,但即使这样,在14天的时间里能有这样的成绩,还是让我着实开心了好一阵.现在我将我的经验分享给各位朋友,供新手借鉴,欢迎高手拍砖. 1.域名的选择很重要 对于域名的选择上

android 想实现利用传感器记蹲起个数怎么实现?

问题描述 android 想实现利用传感器记蹲起个数怎么实现? android 想实现利用传感器记蹲起个数怎么实现?跪求各位指教 解决方案 使用加速传感器,获取垂直方向加速度,判断在一定时间(下蹲再站起所花费的事件)内,向下加速度到达一定值,算下蹲成功操作,上下加速度到一定值算站起操作,注意顺序,只要在指定时间内完成了两个加速度到一定值就算一次下蹲成功.思路就是这样,具体实现自己慢慢琢磨吧,不懂多看API.

记XX2013届优秀毕业生评选(请重视在公司展现自己,重视业绩参评过程,非技术贴)

本文不是什么技术贴,只是作为一名码农,在公司发展中遇到"参评"中的一个分享,希望对大家有帮助,毕竟,升职加薪这种事情,你需要自己去争取,需要获得领导和同事的认可....考虑到隐私,隐去公司名称和人员称呼 在记录自己的经历的同时,也希望能够引起你的共鸣.业绩参评需要注意的问题.特别注意红色字段 昨天老大叫我准备下,去参评XX优秀毕业生.说今天要答辩,尼玛,这也太突然了吧.没有准备.把自己做过的东西拉了个PPT. 今天给各位大佬汇报,结果被XX总裁给批了,说,XX啊,你得讲清楚我们需要的是

php学习随记4

php 操作数组 (合并,拆分,追加,查找,删除等) 博客分类: Php / Pear / Mysql / Node.js 1. 合并数组 array_merge()函数将数组合并到一起,返回一个联合的数组.所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加.其形式为: array array_merge (array array1 array2-,arrayN) 这个函数将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面.返回作为结果的数组. 如果输入的数

记一次失败的jQuery优化尝试

我经常抱怨jQuery的DOM操作性能并不优秀,并且经常尝试用一些方法去进行优化,但是越是优化,越是沮丧地发现jQuery其实已经做得很好,从使用者的角度能够进行的优化实在有限(这并不意味着jQuery的性能是优秀的, 反之只能说它是一个相对封闭的库,无法从外部介入进行优化).这篇文章就记录一次失败的优化经历. 优化思想 这一次优化的思想来自于数据库.在数据库优化的时候,我们常会说将大量的操作放在一个事务中一起提交,能有效提高效率.虽然对数据库不了解的我并不知道其原因,但是事务的思想却为我指明了