NOT ISISTS比使用LEFT OUTER JOIN使用IS NULL条件排除参与表中缺少的记录的效率更高,因为优化程序将选择使用带有NOT
EXISTS谓词的EXCLUSION MERGE JOIN。
虽然您的第二项测试未对数据集产生令人印象深刻的结果,但随着数据量的增加,使用不存在连接而不是通过左联接获得的性能提升非常明显。请记住,表将需要像参加LEFT
JOIN一样,由参加NOT EXISTS联接的列进行散列分布。因此,数据偏斜会影响EXCLUSION MERGE JOIN的性能。
编辑:
通常,我会将EXISTS替换为IN,而不是将其用于重新编写联接解决方案。当参与逻辑比较的列可以为NULL时,尤其如此。这并不是说您不能使用EXISTS代替INNER
JOIN。代替EXCLUSION JOIN,您将最终获得INCLUSION JOIN。本质上,INNER
JOIN是一个包含联接。我敢肯定有些细微之处我会忽略,但是如果您希望花些时间阅读它们,可以在手册中找到它们。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)