项目中遇到问题,大概是这样子:
假设有A表:name age
小明 11
小红 12
小丽 13B表name sex
小明 男
小红 女
小丽 女C表name hobby
小明 足球
小红 唱歌
小丽 跳舞我现在要查出小明的所有记录,像这样的结果:
B表name age sex hobby
小明 11 男 足球有两种选择:
第一种:select a.name,age,sex,hobby
from
(
select name,age from A where name='小明'
) a,
(
select name,sex from B where name='小明'
) b,
(
select name,hobby from C where name='小明'
) c
where a.name=b.name
and b.name =c.name第二种:
select a.name,age,sex,hobby
from
(
select name,age from A
) a,
(
select name,sex from B
) b,
(
select name,hobby from C
) c
where a.name=b.name
and b.name =c.name
and a.name='小明'
鉴于项目中数据量很大,大概上亿,而且实际表和查询条件比较多,我这里只是举例子,所以弄得少,我想问下这两种哪种sql快?为什么?
假设有A表:name age
小明 11
小红 12
小丽 13B表name sex
小明 男
小红 女
小丽 女C表name hobby
小明 足球
小红 唱歌
小丽 跳舞我现在要查出小明的所有记录,像这样的结果:
B表name age sex hobby
小明 11 男 足球有两种选择:
第一种:select a.name,age,sex,hobby
from
(
select name,age from A where name='小明'
) a,
(
select name,sex from B where name='小明'
) b,
(
select name,hobby from C where name='小明'
) c
where a.name=b.name
and b.name =c.name第二种:
select a.name,age,sex,hobby
from
(
select name,age from A
) a,
(
select name,sex from B
) b,
(
select name,hobby from C
) c
where a.name=b.name
and b.name =c.name
and a.name='小明'
鉴于项目中数据量很大,大概上亿,而且实际表和查询条件比较多,我这里只是举例子,所以弄得少,我想问下这两种哪种sql快?为什么?
应该都一样的
每个表都先是从name='小明'
再关联查询的
楼主把第2条SQL语句改称这样他们俩就完全一样的了。select a.name,age,sex,hobby
from
(
select name,age from A
) a,
(
select name,sex from B
) b,
(
select name,hobby from C
) c
where a.name=b.name
and b.name =c.name
and a.name='小明'
and b.name='小明'
and c.name='小明'这种问题,只要查看他们的执行计划就很快得出来了,原理你就看看他们的执行计划把。
支持,这个ORACLE的计算量比较少,过滤掉条件再关联查询,省掉关联的计算次数,其实你可以去看执行计划 ,再比较的
主键的话不是因该默认索引吗?
还有
from
(
select name,age from A where name='小明'
) a,
(
select name,sex from B where name='小明'
) b,
(
select name,hobby from C where name='小明'
) c这是Oracle特别语法吗?
直接
select *
from A,B,C
where a.name=b.name
and b.name =c.name
and a.name='小明'不好吗?
为什么先查询,再给查询结果起个别名 怎么那么奇怪啊?
谁给解释一下啊
楼主简单试验一下就知道了。
[SET AUTOTRACE TRACEONLY]看看你的执行结果。
这样最快!结果要是看不明白,你把结果贴上来,帮你分析一下。