码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-09-06 16:32:28      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

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

sql语句类似于:

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秒左右。

第一次修改:

 and b.ny=‘201508‘ and a.ny=201507

这么关联,还是4秒。

第二次修改

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    了。

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

标签:

原文地址:http://my.oschina.net/u/1540190/blog/501703

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!