如何强制SQL走性能更优的hash join?
原文中文,约3300字,阅读约需8分钟。
📝
内容提要
本文介绍了SQL优化中使用hash join的优势和方法,以及无法使用hash join的原因和不支持的数据类型。建议在join时保持数据类型一致或兼容。
🎯
关键要点
-
hash join通常优于nestloop join,复杂度分别为O(N)和O(N方)。
-
可以通过关闭nestloop或使用hashjoin提示强制使用hash join。
-
不同数据类型的hash函数计算方式不同,互不兼容的数据类型无法进行hash比较。
-
nest loop的复杂度远高于hash join,导致性能差距显著。
-
即使数据类型看似相近,因精度、格式和时区等差异,仍可能无法进行hash join。
-
某些数据类型间的join不支持hash,例如timestamp与date之间的join。
-
建议在join时保持数据类型一致或兼容,以提高性能。
-
在不同兼容模式下,current_date的类型可能不同,影响hash join的使用。
🏷️