锁定老帖子 主题:in 和 exists的区别 用数据说话
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2012-06-01
我泼一盆冷水哦!
其实吧。 我觉得oracle 升级到10g,11g之后,这两个使用方法区别其实不大了。 就像8i以前中的where中判断字段的前后位置还能影响到SQL性能。 我觉得一楼主可以去研究一下oracle的优化器。这种靠SQL的拼写决定性能的路子,我觉得不对。 |
|
返回顶楼 | |
发表时间:2012-06-01
mikixiyou 写道 我泼一盆冷水哦!
其实吧。 我觉得oracle 升级到10g,11g之后,这两个使用方法区别其实不大了。 就像8i以前中的where中判断字段的前后位置还能影响到SQL性能。 我觉得一楼主可以去研究一下oracle的优化器。这种靠SQL的拼写决定性能的路子,我觉得不对。 嗯,我写测试用例来说明sql的执行不是我们说了算,而是执行计划!不同的sql可能得到的执行计划是一样的!因此我们不要随意猜测,一切以执行计划为准!以不变应万变! |
|
返回顶楼 | |
发表时间:2012-06-01
最后修改:2012-06-01
jinnianshilongnian 写道 mikixiyou 写道 我泼一盆冷水哦!
其实吧。 我觉得oracle 升级到10g,11g之后,这两个使用方法区别其实不大了。 就像8i以前中的where中判断字段的前后位置还能影响到SQL性能。 我觉得一楼主可以去研究一下oracle的优化器。这种靠SQL的拼写决定性能的路子,我觉得不对。 嗯,我写测试用例来说明sql的执行不是我们说了算,而是执行计划!不同的sql可能得到的执行计划是一样的!因此我们不要随意猜测,一切以执行计划为准!以不变应万变! 也就是说,你的测试数据并不是为了得出exists和in什么情况谁效率高的规律?我觉得题目应该换成in和exists的执行计划研究。。。题目说"exists 和 in的区别",结论是不能把in和exists作对比,一切看执行计划。。。确实题目让人有点误会。。。 之前部门有个培训,要求我们一定不能用in,in尽可能改成exists。虽然自己对这句话很不满,但是由于地位低下,以及确实不确定exists和in具体怎么被oracle解析,所以只能照着老人明确指示的"规矩"来做。。。 |
|
返回顶楼 | |
发表时间:2012-06-04
liguocai2009 写道 jinnianshilongnian 写道 mikixiyou 写道 我泼一盆冷水哦!
其实吧。 我觉得oracle 升级到10g,11g之后,这两个使用方法区别其实不大了。 就像8i以前中的where中判断字段的前后位置还能影响到SQL性能。 我觉得一楼主可以去研究一下oracle的优化器。这种靠SQL的拼写决定性能的路子,我觉得不对。 嗯,我写测试用例来说明sql的执行不是我们说了算,而是执行计划!不同的sql可能得到的执行计划是一样的!因此我们不要随意猜测,一切以执行计划为准!以不变应万变! 也就是说,你的测试数据并不是为了得出exists和in什么情况谁效率高的规律?我觉得题目应该换成in和exists的执行计划研究。。。题目说"exists 和 in的区别",结论是不能把in和exists作对比,一切看执行计划。。。确实题目让人有点误会。。。 之前部门有个培训,要求我们一定不能用in,in尽可能改成exists。虽然自己对这句话很不满,但是由于地位低下,以及确实不确定exists和in具体怎么被oracle解析,所以只能照着老人明确指示的"规矩"来做。。。 我一直用in |
|
返回顶楼 | |
发表时间:2012-06-04
学习了,不过用10g测试了结果与lz很多都不一样,10g做了蛮多优化
比如 例2 不会再有中间表生成了。 而且 not in 会使用索引 not in 会采用 NESTED LOOPS ANTI(反向嵌套循环) |
|
返回顶楼 | |
发表时间:2012-06-25
11g下,Oracle会自动帮你优化in exists了(自动转换)
当然是简单的in exists语句 就是说在11g下,这两个在简单的sql中没区别了 |
|
返回顶楼 | |
发表时间:2012-08-04
IN 隐藏着排序,小心点特别在子查询当中
|
|
返回顶楼 | |
发表时间:2012-09-06
楼主辛苦了 好帖啊
|
|
返回顶楼 | |
发表时间:2012-11-23
本人非常看好此贴。
|
|
返回顶楼 | |