子查询中的语句会被执行计划分解、简化或进行一些特殊的转换,从而将子查询转化为常用的连接操作。但在一些特殊情况下,子查询有可能无法简化或转化,这时子查询中的语句将被优先执行,其结果集将作为下一个操作的输入部分。
过于复杂的子查询往往会成为查询语句性能上的瓶颈,基于性能的考虑:
应避免在子查询中对大的数据集进行汇总或排序操作。
应尽量缩小子查询中可能返回的结果集,使涉及的数据量尽量小。
尽量使用确定性的判断符,如=、IN、EXISTS等,避免使用ANY、SOME或ALL做大批量数据集的比较。