香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > MYSQL >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

MySQL中对于not in和minus使用的优化


时间:2020-11-02 13:39 作者:admin610456


优化前:

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>@planPLAN_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 processed21 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>@planPLAN_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.

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)