前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >oracle 两表关联时,年月条件的写法引起的巨大性能的差异

oracle 两表关联时,年月条件的写法引起的巨大性能的差异

作者头像
申君健
发布2018-09-21 10:05:38
6810
发布2018-09-21 10:05:38
举报
文章被收录于专栏:前端侠2.0

需求是要比较最近两个月的值,进行数据检验!所以我用自关联,来将两个月的数据放到一行上,然后进行比较!

sql语句类似于:

代码语言:javascript
复制
select b.ny,b.dwdm,。。。。,
     a.js  as sy_js , b.js,    --取出上下两个月的同一列的指标。
     。。。。。。。
 from tjxx_10 a,tjxx_10 b where    a.dwdm=b.dwdm and a.shbz=b.shbz and a.csxm=b.csxm
  and b.ny='201508' and a.ny=b.ny-1

这个语句就是把tjxx_10自关联一下,然后让a行指标201507,b行指标201508.

由于该表已经比较大了有几十万行吧!结果上面执行查询,就要4秒左右。

第一次修改:

代码语言:javascript
复制
 and b.ny='201508' and a.ny=201507

这么关联,还是4秒。

第二次修改

代码语言:javascript
复制
and b.ny='201508' and a.ny='201507'

结果竟然是 0.02秒。

结论:一直以来,我认为在sql中,ny列是varchar2(6)

a.ny=b.ny-1 或者a.ny=201507这种写法都是对的。因为都能正确执行。我认为oracle会自动把数字转为字符串!

但今天遇到这个超大表时,展示出的性能差异说明oracle对上面两种情况都不能利用索引,

因为右侧相当于一个函数,可能要遍历每一行记录,

切记:ny='201507'  不要再写做  ny=201507    了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015/09/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档