连接查询与子查询

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 以上版本进行讨论.


关于这两个查询有篇不错的文章:
[url]http://hi.baidu.com/round_365/blog/item/4bdf1e23f00f304d9258078d.html[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值