今日开发一个需求,其中由于需求变态,写了一个挺复杂的sql,在本地测试环境看不出问题,但到了生产就变得非常慢(由于表数据量比较大),把sql粘贴出来执行了一下大概要42秒.

我写的sql大概是这个样子的(大概描绘下)TABLE_A表数据量大概200w,其中一些关键字段建了索引

select * from TABLE_A a

where a.lng>={变量} and a.lng<={变量}

and a.lat>={变量} and a.lat<={变量}

and a.ci_code in(

...一个复杂sql,执行条件后大概也就几十条数据

)

就是这样一个sql执行却很慢,如果我单独执行红色或单独执行蓝色部分sql就很快,又或者我把红色部分>=与<=截开查询就很快,但放在一起就相当慢。

然后看了下执行计划,主要原因是由于where条件后><(或者or之类的)并且用到in导致驱动表被错误的选择,驱动表选择了“大表”。

后来看到了一篇博文,改造了一下果然就很快了,大概1~2秒就完事了。

改造后

select * from TABLE_A a

where a.lng>={变量} and a.lng<={变量}

and a.lat>={变量} and a.lat<={变量}

intersect

select * from TABLE_A a

where

a.ci_code in(

...一个复杂sql,执行条件后大概也就几十条数据

)

注:intersect是Oracle函数中交并差的交,即是取出两个集合中相同的部分;union、union all是并,union会过滤重复数据,union all不会;minus:  返回在第一个查询结果中包含第二个查询结果中不包含的数据。

还有一种情况可能会导致查询时间过长:

or 和子查询连用导致oracle无法查询重写了(t.DSTC_ID = 1919 ort.DSTC_ID in(select b.regoinidfrom area_info_center@srcdb bwhere b.parentregoinid = 1919)改成 t.DSTC_ID in(select b.regoinidfrom area_info_center@srcdb bwhere b.parentregoinid = 1919 union select 1919 from dual)

一个朋友新做的公众号,帮忙宣传一下,会不定时推送一些开发中碰到的问题的解决方法,以及会分享一些开发视频。资料等。请大家关注一下谢谢:

以上博客参考:

https://blog.csdn.net/ardo_pass/article/details/78545195

oracle中where条件后用in这样子查询后变慢相关推荐

  1. oracle查询多张表交集,Oracle中对两个数据表交集的查询-专栏,ORACLE

    oracle关系型管理系统是世界上流行的关系,它是一个极其强悍.灵活和复杂的系统,据说,在使用oracle时应有这样的观念,那就是在sql中近乎可以推动任何一种想法. 下面向你们介绍使用sql查两个o ...

  2. oracle where in优化,【求助】为什么在where过滤条件中使用in这样子查询后速度变的非常慢?!...

    本帖最后由 yujian0902 于 2014-5-27 16:33 编辑 有次帮同事优化SQL,发现写的SQL使用in这种过滤方式,查询出来花了将近6分钟:而后我改成连接方式(join),不到一秒钟 ...

  3. Oracle中不同条件的日期查询

    select   *   from   mytable   where   to_char(install_date,'YYYYMMDD')   >   '20050101' select   ...

  4. java查询数据比Oracle少,java对ORACLE中的于NCHAR数据的处理,查询

    nchar 数据如果指定了长度,如果数据不满指定的位数,将会在后面补空格. 所以当你使用 jdbc 或者其他框架以该字段作为查询条件时,形成的 sql 也会自动补空格 如: SELECT FROM m ...

  5. java nchar_java对ORACLE中的于NCHAR数据的处理,查询

    nchar 数据如果指定了长度,如果数据不满指定的位数,将会在后面补空格. 所以当你使用 jdbc 或者其他框架以该字段作为查询条件时,形成的 sql 也会自动补空格 如: SELECT FROM m ...

  6. 【数据库】Oracle中的复杂数据处理

    在介绍了Oracle中的基本数据类型及相应的处理函数后,本章将介绍Oracle中较为复杂的数据处理. 接下来,本文将介绍: 1.利用聚合函数来统计数据: 2.常用技巧: 3.oracle中的基本运算: ...

  7. oracle中函数怎么使用方法,Oracle中函数的使用

    1.decode () 例子:它的写法如下decode('a','b','c','d'),其中a,b,c,d可以是其他函数也可以是数值,依据我们自己的情况来使用,它的含义是如果a=b,那么结果显示c, ...

  8. oracle将字符串前移,将字符串转换为oracle中的格式编号

    我正在使用Oracle 10g并具有数据库列Q1的数据类型为varchar2的数据库.该列主要保存float和int值.将字符串转换为oracle中的格式编号 我想运行一个查询,将获取值,但具有标准美 ...

  9. oracle中count用法

    Oracle 中count函数用法 Count用来统计查询结果有几条记录 例表 t_test 姓名 性别 年龄 工资 张三 男 23 2000 李四 女 34 王武 男 25 1300 ①  简单应用 ...

最新文章

  1. JEECG微云快速开发平台
  2. 禅道项目管理软件介绍
  3. uglify压缩angular控制器注意
  4. 汇编语言随笔(2)-CPU指令周期和无条件转移指令(包括call和ret指令)
  5. 微信小程序 界面从右边滑出_微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)...
  6. 倒推后台系统_CRM客户管理系统
  7. python前端用什么架构_Python web世界观——web架构概览(适合传统软件工程师)...
  8. 换种思路去理解设计模式(上)
  9. 苹果Mac 2D/3D数字雕刻软件:Pixologic Zbrush
  10. CF卡显示位置不可用无法访问介质受写入保护怎么办
  11. 【原创smarty仿淘宝商品图片轮播+放大镜效果】
  12. 创建型模式 - 单例模式Singleton
  13. C++初学必练基础题【第二期】
  14. 英语单词在原意和计算机意思,计算机英语单词:Backbone的意思
  15. Django——model基础
  16. C++的学习心得和知识总结(十六)|基于EasyX实现小甲鱼Python飞机大战项目(C++版)
  17. 如何使用迅捷CAD编辑器将CAD导出为PDF
  18. idc机房建设费用_建一个IDC机房要多少资金
  19. sql修改表属性常见错误之——多个对象访问某一列
  20. 【手写数字识别】RBM神经网络手写数字识别【含GUI Matlab源码 1109期】

热门文章

  1. HTML代码 ol ol表示,htmlol标签的使用与定义详解
  2. windows平台下使用cmake构建静态lib库以及使用静态lib库gtest项目
  3. 怎么在php中加入换行符,如何在PHP中创建换行符?
  4. 线性回归——回归预测
  5. 创建添加学生信息的vue实例
  6. 本地游升温,银泰百货成新晋打卡热门地
  7. 【调参10】:如何通过组合多个神经网络提高模型性能
  8. android studio在raw文件夹下使用MediaPlayer播放Mp3音乐
  9. EPICS记录参考4--所有输入记录都有的字段和所有输出记录都有的字段
  10. php之session_start详解