2015-10-17 89 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