寻求大神解答oracle查询顺序及查询效率相关解答

fy6313156 2014-05-26 06:46:30
查询1:

select jk.jk_xh,
jk.rk_rq,
(select kk.dzsph_xh
from t_zs_skykkxx kk
where kk.jk_xh = jk.jk_xh
and kk.zf_bj = '0') as dzsph_xh ,
jk.pz_xh
from t_zs_jkmx jk
where jk.zf_bj = '0';


查询2:

select jk.jk_xh,
jk.rk_rq,
kk.dzsph_xh,
jk.pz_xh
from t_zs_jkmx jk ,t_zs_skykkxx kk
where jk.zf_bj = '0'
and kk.jk_xh = jk.jk_xh
and kk.zf_bj = '0';

这两个查询哪个效率比较高,为什么?顺便问下查询1的执行顺序,是先执行
select kk.dzsph_xh
from t_zs_skykkxx kk
where kk.jk_xh = jk.jk_xh
and kk.zf_bj = '0'
这段代码嘛?
...全文
186 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fy6313156 2014-05-27
  • 打赏
  • 举报
回复
引用 4 楼 zhaoxiangchong 的回复:
我发表下我的个人看法,是第二种效率高。我的理由:第一种会对表t_zs_skykkxx进行全表扫描多次,扫描的次数取决于where子句中查询出来的数据量。第二种仅仅会扫描一下,并且因为多了一个where字句的限制,会使查出来的行数大大减少。个人见解,如果不妥,请楼主指正。
也许是跟我数据表内数据有关,查询1的效率是查询2的效率快一倍。我之前也是跟你一样的想法。
qq804927505 2014-05-27
  • 打赏
  • 举报
回复
查询1:会把所有符合条件jk.zf_bj = '0'记录根据jk_xh去t_zs_skykkxx获取对应的记录。因此每一条符合条件的数据都会开启一次数据库访问。 查询2:由于在访问数据库的时候通过kk.jk_xh = jk.jk_xh进行了数据关联,会在一次对数据库的访问中,把所有符合条件的记录都查询出来。 总结:查询2查询效率比查询1高的原因就是减少了对数据库的访问。
善若止水 2014-05-26
  • 打赏
  • 举报
回复
我发表下我的个人看法,是第二种效率高。我的理由:第一种会对表t_zs_skykkxx进行全表扫描多次,扫描的次数取决于where子句中查询出来的数据量。第二种仅仅会扫描一下,并且因为多了一个where字句的限制,会使查出来的行数大大减少。个人见解,如果不妥,请楼主指正。
fy6313156 2014-05-26
  • 打赏
  • 举报
回复
引用 2 楼 mcxhh2005 的回复:
你用explain能查到差异没?
查了一下,效率几乎提高一倍,但是具体原理我也不太清楚,所以想请大神给我解释一下。
ChinaITOldMan 2014-05-26
  • 打赏
  • 举报
回复
你用explain能查到差异没?
fy6313156 2014-05-26
  • 打赏
  • 举报
回复
自己给自己顶,人呢?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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