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

鸣宇淳
博客专家认证
2011-12-20 02:49:32
我遇到一个语句如下:

select t.spxxid
from TJBB_DDGL_DDXSFW t
left join jt_Webg_Ddkxskc kc on
t.spxxid = kc.spxxid and t.ckid = kc.ckid
where t.gysid = '1276';

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

select t.spxxid
from TJBB_DDGL_DDXSFW t
left join jt_Webg_Ddkxskc kc on
t.spxxid = kc.spxxid
where t.gysid = '1276';


select t.spxxid
from TJBB_DDGL_DDXSFW t
left join jt_Webg_Ddkxskc kc on
t.ckid = kc.ckid
where t.gysid = '1276';


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


select t.spxxid
from TJBB_DDGL_DDXSFW t
left join jt_Webg_Ddkxskc kc on
(t.spxxid = kc.spxxid and t.ckid = kc.ckid) where t.gysid = '1276';
...全文
1173 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaobn_cn 2011-12-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chybin500 的回复:]
执行计划确实是一样的,加不加括号的确没区别。
两次时间不一样的原因是应该是查询第一个时,有个存储过程在对表进行大的操作(删除再导入,这操作挺2的,2000多万呀)。
存储过程执行完了,两种方法是一样的时间。
哦,够糗的~
[/Quote]

无言
iihero 2011-12-21
  • 打赏
  • 举报
回复
楼主得到了。
qinglang1987 2011-12-20
  • 打赏
  • 举报
回复
貌似没得区别啊,是不是第一次执行有sql占有查询的表了,后面查询的时候,没有占用
鸣宇淳 2011-12-20
  • 打赏
  • 举报
回复
执行计划确实是一样的,加不加括号的确没区别。
两次时间不一样的原因是应该是查询第一个时,有个存储过程在对表进行大的操作(删除再导入,这操作挺2的,2000多万呀)。
存储过程执行完了,两种方法是一样的时间。
哦,够糗的~
youshang444 2011-12-20
  • 打赏
  • 举报
回复
是不是第一次查的时候数据还在磁盘,后面几次查的数据已经cache到内存里面了啊!
minitoy 2011-12-20
  • 打赏
  • 举报
回复
有没有括号貌似没区别。你是不是加索引了?
yuyeyi 2011-12-20
  • 打赏
  • 举报
回复
路过.....楼主把执行计划的区别拿出来对比一下?

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧