sql如下所示:
SELECT SUM(T.F1), SUM(T.F2), SUM(T.F3), SUM(T.F4), SUM(T.F5), SUM(T.F6), SUM(T.F7), SUM(T.F8), SUM(T.F9), SUM(T.F10), SUM(T.F11), SUM(T.F12)
          INTO V_CONT_RECORD
          FROM (SELECT SUM(DECODE(BF.FLOOR_NUM, '-1', COUNT(*), 0)) F1, SUM(DECODE(BF.FLOOR_NUM, '1', COUNT(*), 0)) F2,
                       SUM(DECODE(BF.FLOOR_NUM, '2', COUNT(*), 0)) F3, SUM(DECODE(BF.FLOOR_NUM, '3', COUNT(*), 0)) F4,
                       SUM(DECODE(BF.FLOOR_NUM, '4', COUNT(*), 0)) F5, SUM(DECODE(BF.FLOOR_NUM, '5', COUNT(*), 0)) F6,
                       SUM(DECODE(BF.FLOOR_NUM, '-1', BS.SQUARE_REAL, 0)) F7, SUM(DECODE(BF.FLOOR_NUM, '1', BS.SQUARE_REAL, 0)) F8,
                       SUM(DECODE(BF.FLOOR_NUM, '2', BS.SQUARE_REAL, 0)) F9, SUM(DECODE(BF.FLOOR_NUM, '3', BS.SQUARE_REAL, 0)) F10,
                       SUM(DECODE(BF.FLOOR_NUM, '4', BS.SQUARE_REAL, 0)) F11, SUM(DECODE(BF.FLOOR_NUM, '5', BS.SQUARE_REAL, 0)) F12    
                  FROM BIS_CONT BC
                  LEFT JOIN BIS_STORE_CONT_REL BSCR ON BC.BIS_CONT_ID = BSCR.BIS_CONT_ID
                  LEFT JOIN BIS_STORE BS ON BSCR.BIS_STORE_ID = BS.BIS_STORE_ID
                  LEFT JOIN BIS_FLOOR BF ON BS.BIS_FLOOR_ID = BF.BIS_FLOOR_ID
                 WHERE BC.CONT_TYPE_CD = '1' --合同类型为租赁
                   AND BC.STORE_TYPE = '1'   --物业类型为购物中心
                   AND BC.MANAGE_CD='2'      --商铺类型为小商铺
                   AND BC.BIS_PROJECT_ID = P_BIS_PROJECT_ID
                   AND BC.STATUS_CD ='3'
                   AND (BF.FLOOR_NUM='-1' OR BF.FLOOR_NUM='1' OR BF.FLOOR_NUM='2' OR
                   BF.FLOOR_NUM='3' OR BF.FLOOR_NUM='4' OR BF.FLOOR_NUM='5')
                   AND SUBSTR(BC.PROPORTION_NAMES,0,
                   DECODE(INSTR(BC.PROPORTION_NAMES, '-', 1, 1),0,LENGTH(BC.PROPORTION_NAMES),
                   INSTR(BC.PROPORTION_NAMES, '-', 1, 1) - 1)) =V_OPREATE_TYPE
                   AND P_YMD >= TO_CHAR(BC.RENT_DATE, 'YYYY-MM-DD')
                   AND ((BC.CONT_TO_FAIL_DATE IS NOT NULL AND
                   P_YMD <= TO_CHAR(BC.CONT_TO_FAIL_DATE, 'YYYY-MM-DD')) OR
                   (BC.CONT_TO_FAIL_DATE IS NULL AND
                   P_YMD <= TO_CHAR(BC.CONT_END_DATE, 'YYYY-MM-DD')))   
                 GROUP BY BF.FLOOR_NUM, BS.SQUARE_REAL
                UNION ALL
                SELECT SUM(DECODE(BFR.FLOOR_NUM, '-1', COUNT(*), 0)) F1, SUM(DECODE(BFR.FLOOR_NUM, '1', COUNT(*), 0)) F2,
                       SUM(DECODE(BFR.FLOOR_NUM, '2', COUNT(*), 0)) F3, SUM(DECODE(BFR.FLOOR_NUM, '3', COUNT(*), 0)) F4,
                       SUM(DECODE(BFR.FLOOR_NUM, '4', COUNT(*), 0)) F5, SUM(DECODE(BFR.FLOOR_NUM, '5', COUNT(*), 0)) F6,
                       SUM(DECODE(BFR.FLOOR_NUM, '-1', BST.SQUARE_REAL, 0)) F7, SUM(DECODE(BFR.FLOOR_NUM, '1', BST.SQUARE_REAL, 0)) F8,
                       SUM(DECODE(BFR.FLOOR_NUM, '2', BST.SQUARE_REAL, 0)) F9, SUM(DECODE(BFR.FLOOR_NUM, '3', BST.SQUARE_REAL, 0)) F10,
                       SUM(DECODE(BFR.FLOOR_NUM, '4', BST.SQUARE_REAL, 0)) F11, SUM(DECODE(BFR.FLOOR_NUM, '5', BST.SQUARE_REAL, 0)) F12 
                  FROM BIS_STORE BST
                  LEFT JOIN BIS_FLOOR BFR  ON BST.BIS_FLOOR_ID = BFR.BIS_FLOOR_ID
                 WHERE  BST.LAYOUT_CD = ITEM
                   AND (BFR.FLOOR_NUM='-1' OR BFR.FLOOR_NUM='1' OR BFR.FLOOR_NUM='2' OR
                   BFR.FLOOR_NUM='3' OR BFR.FLOOR_NUM='4' OR BFR.FLOOR_NUM='5')
                   AND BFR.CHARGE_TYPE='1' --物业类型为购物中心
                   AND BST.STORE_POSITION='2'--商铺类型为小商铺
                   AND BST.BIS_PROJECT_ID = P_BIS_PROJECT_ID
                   AND (BST.SPLIT_STATUS IS NULL OR BST.SPLIT_STATUS = '0')
                   AND (BST.IF_SUBMIT = '1' OR BST.IF_SUBMIT = '2' OR
                       BST.IF_SUBMIT IS NULL)
                    --AND BST.STORE_NO NOT IN
                   AND NOT EXISTS
                       (SELECT  1 FROM
                          BIS_CONT BT LEFT JOIN BIS_STORE_CONT_REL BSCR
                          ON BT.BIS_CONT_ID = BSCR.BIS_CONT_ID
                          LEFT JOIN  BIS_STORE BSA ON
                          BSCR.BIS_STORE_ID = BSA.BIS_STORE_ID
                          WHERE BT.BIS_PROJECT_ID = P_BIS_PROJECT_ID
                            AND BT.CONT_TYPE_CD = '1' --合同类型为租赁
                            AND BT.STORE_TYPE = '1'   --物业类型为购物中心
                            AND BT.MANAGE_CD='2'      --商铺类型为小商铺
                            AND BT.STATUS_CD ='3'
                            AND P_YMD >= TO_CHAR(BT.RENT_DATE, 'YYYY-MM-DD')
                            AND ((BT.CONT_TO_FAIL_DATE IS NOT NULL AND
                                P_YMD <= TO_CHAR(BT.CONT_TO_FAIL_DATE, 'YYYY-MM-DD')) OR
                                (BT.CONT_TO_FAIL_DATE IS NULL AND
                                P_YMD <= TO_CHAR(BT.CONT_END_DATE, 'YYYY-MM-DD')))
                            AND BSA.STORE_NO = BST.STORE_NO
                                )
                 GROUP BY BFR.FLOOR_NUM, BST.SQUARE_REAL) T;
红色部分是真正的瓶颈所在,这个sql是查询一下项目公司下面的,-1到5楼的商铺的总数,面积等等之类的业务,数据量应该在1000条之内的,这个是运行在procedure里面的,没修改红色之前,需要132s,修改之后在3s内就出来了, 原理如下 :用EXISTS替代IN、用NOT EXISTS替代NOT IN:
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率. 在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下, NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历) . 为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS.

sql中用EXISTS替代IN、用NOT EXISTS替代NOT IN显著变化相关推荐

  1. sql之嵌套查询中的带exists谓词的子查询

    数据库系统概论之嵌套查询中的带exists谓词的子查询 一.exists谓词概述:exists谓词代表存在量词.带有exists谓词的子查询不返回任何数据,只产生逻辑真值"true" ...

  2. sql中 in 、not in 、exists、not exists 用法和差别

    exists (sql 返回结果集为真) not exists (sql 不返回结果集为真) 如下: 表A ID NAME 1    A1 2    A2 3  A3 表B ID AID NAME 1 ...

  3. sql语句里面最难的not exists,exists,口语化解释(个人笔记)

    文章目录 1.查询选修了所有课程的学生 2.查询至少选修了课程号为1,2的学生 3.思考一下where是如何筛选记录的 4.exists的返回的是boolean值 5.对查询选修了所有课程的学生的sq ...

  4. 关于Oracle中in,exists 与 not in, not exists

    文章简要的讨论了in,exists 与 not in, not exists在使用中的问题,主要是关键字的选择,SQL的优化 *注:下面示例都是用Oracle内置用户的表,如果安装Oracle时没有选 ...

  5. Laravel Base table or view already exists: 1050 Table 'users' already exists

    PS D:\phpStudy\WWW\BCCAdminV1.0> php artisan migrate [Illuminate\Database\QueryException] SQLSTAT ...

  6. 用正则表达式替换html标签,在SQL中用正则表达式替换html标签

    由于数据库的一个表字段中多包含html标签,现在需要修改数据库的字段把html标签都替换掉.当然我可以通过写一个程序去修改,那毕竟有点麻烦.直接在查询分析器中执行,但是MS SQL Server并没有 ...

  7. mysql的exists解析_mysql中关于exists的深入讲解

    mysql中关于exists的讲解 我认为exists语法是mysql中一个很强大的工具,可以简单地实现某些复杂的数据处理. 下面我谈谈与exists有关的三个方面. all 与 any 首先,看到了 ...

  8. mysql数据类型double,double在数据库怎么定义 mysql中double类型在sql中用什么类型

    sql定义一个double变量怎么定义? 局部变量 声明:DECLARE @local_variable data_type @local_variable 是变量的名称.变量名必须以 at 符 (@ ...

  9. sql server 密钥_SQL Server中的升序密钥和CE模型变化

    sql server 密钥 In this note, I'm going to discuss one of the most useful and helpful cardinality esti ...

  10. SQL Server中的筛选后的统计信息和CE模型变化

    In this blog post, we are going to view some interesting model variation, that I've found while expl ...

最新文章

  1. Linux权限管理(suid euid)
  2. c++ string 拼接_String类5个常见面试题的解答过程和原理
  3. Oracle 数据库linux下sql命令行按回退键变成^H字符输入问题解决方法
  4. Oracle - 行转列, 列转行
  5. 信息系统项目管理师-论文专题(一)论文写作框架+10大管理关系
  6. redis的lrange_thinkphp5操作redis系列教程】列表类型之lRange,lGetRange
  7. QQ空间说说的表情添加的代码
  8. 标准SQL注入入侵语句
  9. Qt5.7+Opencv2.4.9人脸识别(三)人脸处理
  10. WCF远程服务器返回了意外响应: (413) Request Entity Too Large问题处理
  11. 2-2 内建变量类型
  12. C# 人民币大小写转换正则表达式
  13. matlab 例题sin,matlab基础练习题(带答案).doc
  14. 企业污染排放数据库、海关数据库
  15. 读懂React原理之调和与Fiber
  16. Python趣味绘图,一闪一闪亮晶晶,满天都是小星星
  17. 带节点的曲线,可以鼠标拖动节点,类似PS
  18. 用HTML+CSS做一个简单好看的校园社团网页
  19. 如何在不安装应用程序的情况下旋转iPhone视频
  20. js中大于0的正整数正则

热门文章

  1. jkd1.8 list.stream()练习
  2. Python学习资料全面总结,真的对零基础很有用
  3. CCF认证2019031-小中大
  4. 足球大数据预测中欧亚大小球随时间变化的处理
  5. 谈一谈对新技术的态度
  6. 文本分析常用R包的安装(Rweibo、wordcloud、tm、tmcn、Rwordseg、Rcharts、xlsx、XLConnect)
  7. 【Hello Linux】Linux入门
  8. 图像识别教程(百度AI开放平台)
  9. adroid xpose 修改java方法实例_基于xposed 修改硬件信息(xposed框架使用)
  10. Android 微信分享与QQ分享功能(原生实现)