+ -
当前位置:首页 → 问答吧 → 遇到join on的条件加括号和不加括号的区别,百思不得其解,求高人指点

遇到join on的条件加括号和不加括号的区别,百思不得其解,求高人指点

时间:2011-12-20

来源:互联网

我遇到一个语句如下:
SQL code

select t.spxxid
  from TJBB_DDGL_DDXSFW t
  left join jt_Webg_Ddkxskc kc on
  [color=#FF0000]t.spxxid = kc.spxxid and t.ckid = kc.ckid[/color] 
where t.gysid = '1276';


其中TJBB_DDGL_DDXSFW 表有2000多万条数据,jt_Webg_Ddkxskc 有700多万数据,jt_Webg_Ddkxskc 表加了ckid字段和spxxid字段的索引,TJBB_DDGL_DDXSFW表也加了ckid字段、spxxid字段、gysid字段的索引。
可是查询时间还是要用47秒。开始怎么也优化不好。但发现下面两种写法执行时间都是在零点几秒。
SQL code

select t.spxxid
  from TJBB_DDGL_DDXSFW t
  left join jt_Webg_Ddkxskc kc on
 [color=#FF0000]t.spxxid = kc.spxxid[/color]  
where t.gysid = '1276';


SQL code

select t.spxxid
  from TJBB_DDGL_DDXSFW t
  left join jt_Webg_Ddkxskc kc on
 [color=#FF0000]t.ckid = kc.ckid [/color]
where t.gysid = '1276';



之后各种尝试,各种苦恼,最后无意中发现加上括号执行时间就可以达到 0.4秒。像下面这样写。
虽然问题解决了,但找遍了书和百度,也没找到原因。
恳请CSDN的高人显身哇!谢谢啦!

SQL code

select t.spxxid
  from TJBB_DDGL_DDXSFW t
  left join jt_Webg_Ddkxskc kc on
[color=#FF0000](t.spxxid = kc.spxxid and t.ckid = kc.ckid)[/color] where t.gysid = '1276';

作者: chybin500   发布时间: 2011-12-20

路过.....楼主把执行计划的区别拿出来对比一下?

作者: yuyeyi   发布时间: 2011-12-20

有没有括号貌似没区别。你是不是加索引了?

作者: minitoy   发布时间: 2011-12-20

是不是第一次查的时候数据还在磁盘,后面几次查的数据已经cache到内存里面了啊!

作者: youshang444   发布时间: 2011-12-20

执行计划确实是一样的,加不加括号的确没区别。
两次时间不一样的原因是应该是查询第一个时,有个存储过程在对表进行大的操作(删除再导入,这操作挺2的,2000多万呀)。
存储过程执行完了,两种方法是一样的时间。
哦,够糗的~

作者: chybin500   发布时间: 2011-12-20