oracle中一段sql查询优化的思考,第一段sql是原来的,第二段是优化的sql,想问下为什么第一段会那么慢?

oracle中一段sql查询优化的思考,第一段sql是原来的,第二段是优化的sql,想问下为什么第一段会那么慢?
INFO_TB_XXX_LIVE 数据量300万+,INFO_TB_XXX 数据量800万+

第一段

select b.id, 
(select count(l.id) from INFO_TB_XXX_LIVE l where l.build_id = b.id and l.del_flag = '0' and l.LIVE_EDATE IS NULL) as LIVE_COUNT 

from INFO_TB_XXX b

第二段

select b.id id,
count(l.id) LIVE_COUNT
from  INFO_TB_XXX b
join INFO_TB_XXXX_LIVE  l on  l.build_id = b.id and l.del_flag = '0' and l.LIVE_EDATE IS NULL
group by b.id

两段sql结果是一样的,
但是还不清楚第一段为啥那么慢?

第一个是先取迪卡尔集再where,效率是O(N^2)
第二个join是直接用hash匹配,效率是O(LogN)
所以随着数据量的增大,后者效率就会比前者高很多很多。