建议7.3:谨用或尽量不要使用in/exists、not in/not exists方式,而应该使用直接连接方式替换。
--直接外连接方式写法:
select count(*)
from t_tablename1 a, t_tablename2 b
where a.column1 = b.column1(+)
and b.column1 is null;
--直接连接方式写法:
select count(*)
from t_tablename1 a, t_tablename2 b
where a.column1 = b.column1;
说明
使用in/exists/not in/not exists方式,要求开发人员必须正确理解其处理机制,并且需要对语句进行细致的测试和优化工作,如果不假思索的拿来使用往往会造成严重的性能问题。因此,我们通常建议使用直接连接方式进行替换。
建议7.4:嵌套循环连接中非常大的表作内表(被驱动表)时,其连接字段上需建有索引。
&说明
嵌套循环连接在内表较大时,如果其连接字段无索引,那么每次循环都会对内表进行全表扫描,这样会产生大量的逻辑I/O,语句性能严重下降,在内表连接字段建立索引的目的是为了减少逻辑I/O。