kyo20 2008-11-11 20:37
浏览 161
已采纳

连接查询与子查询

in oracle :

在一个查询中有许多条件相同的子查询,但需要的值不同。例如:

SQL 1:

select 
(select u.name from user u where u.id = i.id) as name,
(select u.nick_name from user u where u.id = i.id) as nick_name,
(select u.create_date from user u where u.id = i.id) as create_date,
i.title as title,
i.content as content
from info i



这个 SQL 里面有三个子查询,并且是同样的查询条件,应该能够进行优化.



也可以改为连接查询:

SQL 2:

select 
u.name as name,
u.nick_name as nick_name,
u.create_date as create_date,
i.title as title,
i.content as content
from info i join user u on i.id = u.id





有两个问题要请教大家:

1. SQL 1 的子查询明显可以优化, 问题是怎么将子 SQL 提出来,做为一个对象使用,就像连接查询中 u.name , u.nick_name... 这样使用, 知道的一个办法就是使用连接查询,还有没有其他的办法,比如使用 pl/sql.

2. SQL 2 的连接查询,如果 user 表中有太多的字段和若干索引,会不会将 user 表中的所和索引都检索一遍, 从而大大影响了效率?

请大家基于 oracle 9i 以上版本进行讨论.





关于这两个查询有篇不错的文章:

http://hi.baidu.com/round_365/blog/item/4bdf1e23f00f304d9258078d.html


问题补充
无人问津?
  • 写回答

2条回答 默认 最新

  • iteye_14081 2008-11-11 22:06
    关注

    很显然,第二种连接查询的效率在觉得多数情况下要明显优于第一种子查询。
    user表中的字段和索引比较多也不会明显的降低查询效率

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?