2015-10-17 168 views
0

我运行两个SQL查询说,SQL嵌套查询优化

select obname from table1 where obid = 12 

select modname from table2 where modid = 12 

两者都采取非常短的时间,说每300毫秒。

但是当我运行:

select obname, modname 
from (select obname from table1 where obid = 12) as alias1, 
(select modname from table2 where modid = 12) as alias2 

它正在3500ms。为什么这样?

+0

这两个查询返回多少行? –

+0

首先,您将2个查询与1进行比较,执行查询不像苹果只是将时间加在一起并完成 – Mihai

+1

为什么不使用'UNION ALL' –

回答

1

通常,在from子句中放置两个标量查询不会影响性能。实际上,从应用程序的角度来看,一个查询可能会更快,因为数据库的开销较少。标量查询返回一列和一行。然而,如果查询返回多行,那么你的小逗号就是做大量的笛卡儿积(这就是为什么我总是用CROSS JOIN而不是FROM子句中的逗号)。在这种情况下,所有投注都将关闭,因为数据必须在结果开始返回后处理。

+0

即使交叉join对我来说是同一时间......因为第二个查询只返回一行 – Jayant