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

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结果是一样的,
但是还不清楚第一段为啥那么慢?

1个回答

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问