sql语句中选取限制字段的不同可能会对运行效率产生质的影响

      做项目遇到的一个问题,稀奇古怪的!发来分享下!

    先看下一条sql语句:

select t1.safecode,t1.corpcode,t1.corpname,sum(t.zxamtusd)

from 1 as t,表2 as t1  where t1.safecode like '32%' and  t1.corpcode like '%134754932%' and  t.encode=t1.corpcode  and  t.recsts='4'

group by t1.safecode,t1.corpcode,t1.corpname

    其中表1、表2的数据量时相当可观的:分别拥有100000+的数据

    注意上面的那条语句:其中有t.encode=t1.corpcode,并且对表2进行了t1.corpcode like '%134754932%'限制,对表1进行了t.recsts='4'限制,其实这里对表2的限制可以改为对表1的限制,因为t.encode=t1.corpcode,但人有时就是有点固定思维,没那么做,以为这样的改动不会影响什么,其实我们这种思维就是错的!

    问题出现了:这条语句在数据库中运行不出来结果,出现类死锁现象!

    但当我将t1.corpcode like '%134754932%'改为t.encode like '%134754932%',这样很快就能运行出结果。

    如下正确写法:

select t1.safecode,t1.corpcode,t1.corpname,sum(t.zxamtusd)

from 1 as t,表2 as t1  where t1.safecode like '32%' and  t.encode like '%134754932%' and  t.encode=t1.corpcode  and  t.recsts='4'

group by t1.safecode,t1.corpcode,t1.corpname

    虽然这两条语句表达的意思是一样的,但运行时间是质的差别,上条语句没能在我能忍受的时间内查出来(超过5分钟!!!)!而第二条只需几十秒。

    怀疑原因:限制条件只对一张表操作,操作好后的结果,再与另一张表关联,此时只有关联操作而没有了限制操作,所以对于大数据量的表,运行时间就有质的不同!(这只是本人的个人认为,我也不是研究数据库的,不是太了解内部运行机制!)

    注意:不是说这里不可以同时对两张表进行限制,万一用户的需求就是那么定的,我们必须对两张表都进行一定的限制的时候,我们就别无办法了。但我们在选择限制的时候,特别是对那些对两张表相等关联的字段,同时又要对这些字段进行像上面语句那样的like限制时,我们就得考虑清楚了,是否给数据操作添加了复杂度了!换个字段试试,或许效果就不一样了!

    望给遇到类似问题的兄弟们,有所帮助!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章