项目中有个需要需要如下pl/sql(数据库是MariaDB)

    SELECT COUNT(1) AS small FROM cmp_ent_main a  WHERE  createTime<'2016-9-21'AND EXISTS(SELECT 1 FROM cmp_ent_service_config WHERE entId=a.id AND serviceType IN(2,3,4) AND STATUS=0) ;

执行时发现耗时近50秒,这是测试环境啊,

表cmp_ent_main,pk是id,有74836条记录;表cmp_ent_service_config,pk是entId和serviceType,有2254条记录,并不多。

explain看一下执行计划:

说实话,mysql不熟,也并没看出什么门道。

经过排查原因,最后发现原因是cmp_ent_service_config表的entId是varchar, entId是企业Id,这个系统里约定的企业Id是bigint。看来做这个模块的设计者忽略了这一点就设置成varchar了。

改成bigint,果然,毫秒级就查出结果了。类型一致多么的重要!

我找到这个模块的开发担当,他习惯用in,于是改成in,并恢复entId的类型为varchar,发现也是毫秒级出结果。

EXPLAINSELECT COUNT(1) AS small FROM cmp_ent_main a  WHERE  createTime<'2016-9-21'AND EXISTS(SELECT 1 FROM cmp_ent_service_config WHERE entId=a.id AND serviceType IN(2,3,4) AND STATUS=0) ;EXPLAINSELECT 0 allcount, COUNT(1) AS small FROM cmp_ent_main a WHERE  createTime<'2016-9-21'AND a.id IN(SELECT entId FROM cmp_ent_service_config WHERE serviceType IN(2,3,4) AND STATUS=0)  

细看两者的查询计划,发现主要的区别是cmp_ent_main的记录数,一个是70303,一个是1

当把entId的类型改为bigint后, 两者的执行计划是:

转载于:https://www.cnblogs.com/buguge/p/5854325.html

pl/sql里的exists和in的差别相关推荐

  1. 在PL/SQL里直接插入日期时提示 is not a valid date and time的解决方法

    在PL/SQL里直接插入日期时提示 is not a valid date and time的解决方法 参考文章: (1)在PL/SQL里直接插入日期时提示 is not a valid date a ...

  2. oracle PL/SQL里给字段起别名

    select case TianQi when 1 then '晴天' when 2 then '阴天' when 3 then '小雨'end as "别名" from tb-- ...

  3. Oracle数据库之PL/SQL程序基础设计

    一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /** 声明部分--定义常量.变量.复杂数据类型.游标.用户自定义异常*/ BEGIN /** 执行部分 ...

  4. PL/SQL块结构和组成元素

    本篇主要内容如下: 2.1   PL/SQL块 2.2   PL/SQL结构 2.3   标识符 2.4   PL/SQL 变量类型 2.4.1  变量类型 2.4.2  复合类型 2.4.2.1 记 ...

  5. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)...

    [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) 原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之 ...

  6. ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORAC ...

  7. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORAC ...

  8. ORACLE PL/SQL编程之二:PL/SQL块结构和组成元素

    2.1 PL/SQL块 PL/SQL程序由三个块组成,即声明部分.执行部分.异常处理部分. PL/SQL块的结构如下: DECLARE --声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及 ...

  9. ORACLE PL/SQL编程--PL/SQL块结构和组成元素

      本篇主要内容如下: 2.1   PL/SQL块 2.2   PL/SQL结构 2.3   标识符 2.4   PL/SQL 变量类型 2.4.1  变量类型 2.4.2  复合类型 2.4.2.1 ...

最新文章

  1. 为什么LED内部不集成限流电阻呢?
  2. 032-session函数
  3. mac上php环境_在Mac系统下配置PHP运行环境
  4. (四)数据结构与算法-链表
  5. Java总结篇系列:Java多线程(一)
  6. 第1.5 章 elasticsearch备份过程记录
  7. 在Vue3项目中使用 Echarts 绘制股票图表的分享(二):绘制现价图+均价图
  8. 面经手册 · 第20篇《Thread 线程,状态转换、方法使用、原理分析》
  9. 第十一届中国云计算标准和应用大会 | 华云数据成为全国信标委云计算标准工作组云迁移专题组副组长单位副组长单位
  10. UI设计之logo制作基本方法
  11. Linux命令行与shell脚本(17)--正则表达式
  12. 计算机常见故障 英语词汇,计算机常用英语词汇大全剖析.doc
  13. C# 设置Excel打印选项及打印excel文档
  14. C语言实现操作系统的进程调度算法--RR算法
  15. 超强性价比NB:全国首测神舟承龙 A250T
  16. MAC使用GTK创建界面
  17. 5G+V2X自动驾驶新趋势
  18. Kong系列-05-使用入门
  19. 使用weinre调试移动端真机
  20. 单招计算机试题出处,2017年职业技术学院单独招生综合素质测试试题库及答案...

热门文章

  1. 理解Android Binder机制(3/3):Java层
  2. Android插件化原理解析——概要
  3. Android 5.1 Lollipop的Zygote分析——上篇
  4. python如何进行双色球预测最准确_【原创】python基于大数据现实双色球预测
  5. php post登录跳转,php实现post跳转
  6. cmd imp导入dmp文件_PLSQL Developer导入导出表数据结构
  7. python鸢尾花数据集聚类_R语言鸢尾花iris数据集的层次聚类分析
  8. CVPR 2017 ECO:《ECO: Efficient Convolution Operators for Tracking》论文笔记
  9. qy2格式怎么转成mp3_怎么把常见的视频格式mp4转为音频格式mp3?
  10. 2020-09-16 如何在matlab figure中对latex符号进行大写操作