原因:Oracle在执行IN子查询时,首先执行子查询,将查询结果放入临时表再执行主查询。
而EXIST则是首先检查主查询,然后运行子查询直到找到第一个匹配项。
NOT EXISTS 比 NOT IN 效率稍高。但具体在选择IN或EXIST操作时,
要根据主子表数据量大小来具体考虑。
SELECT * FROM SP_MATTERS WHERE UUID IN (SELECT UUID FROM SP_MATTERS)
SELECT * FROM SP_MATTERS WHERE EXISTS (SELECT UUID FROM SP_MATTERS WHERE UUID = SP_MATTERS.UUID)
不用"<>“或者”!=“操作符, 对于不等于操作符会造成全表扫描, 应该用”>" OR “<” 代替
is null 或者 is not null 条件会造成全表扫描, 解决方案可以为该列设置非空索引,就可以利用其它条件判断
尽量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替。 原因:Oracle在执行IN子查询时,首先执行子查询,将查询结果放入临时表再执行主查询。 而EXIST则是首先检查主查询,然后运行子查询直到找到第一个匹配项。 NOT EXISTS 比 NOT IN 效率稍高。但具体在选择IN或EXIST操作时, 要根据主子表数据量大小来具体考虑。 SELECT * FROM SP_MATTERS WHERE UUID IN (SELECT UUID FROM SP_M.