讨论一个SQL性能调优问题

yinan9 2014-07-02 01:42:30
有如下两段SQL,返回的结果相同,但貌似性能略有差异,第二种效率略好。
查看了各自的执行计划,居然是相同的。
请大家讨论下,以下两种写法,哪一种是首选呢?
另外,子查询如何能够优化SQL的效率?

--SQL 1
SELECT account_id,address1,address2
FROM ADDRESSREFERENCE ADDRRF
LEFT JOIN ADDRESS ADDR
ON ADDRRF .ADDRESSID = ADDR. ADDRESSID
WHERE ADDRRF. ADDRESSTYPEID = 10
AND ADDRRF .ENTITYID = 3 ;


  SELECT account_id,address1,address2 frin 
(SELECT * FROM ADDRESSREFERENCE WHERE ADDRESSTYPEID = 10 AND ENTITYID =3 ) ADDRRF
LEFT JOIN ADDRESS ADDR ON ADDRRF.ADDRESSID = ADDR. ADDRESSID ;
...全文
230 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
同意1#看法
美到心痛 2014-07-02
  • 打赏
  • 举报
回复
如果执行计划一样,速度不一样.首先我怀疑的是因为,第二条语句在执行的时候,你没有alter system flush share_pool;alter system flush buffer_cache;这个时候在第一条语句执行之后,你的表块在buffer pool当然就快一点了.其他速度是一样的. 如果不是这个原因,建你先做一个dbms_stats.gather_table_stats收集一下表的统计信息.
小灰狼W 2014-07-02
  • 打赏
  • 举报
回复
此类语句一般效率是一样的 在一些情况下,例如驱动表需要聚合,那么在子查询里聚合以后再做连接效率可能会比连接以后再聚合高得多

17,088

社区成员

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

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