以下是显示SQL语言中允许的所有类型的子查询的映射,以及可用于处理它们的优化程序策略。
-
无色区域表示不同种类的子查询,例如:
- from x IN (select xx)
- from () xxx
- ...
- 每个未着色区域的大小大致对应于该种子查询的重要性(即经常使用)的大小。 例如,x IN(SELECT ...)查询是最重要的,而EXISTS(SELECT ...)是相对不重要的
- 彩色区域表示应用于处理各种子查询的优化/执行策略。
- 底部的颜色表示它可用的是哪个版本的MySQL / MariaDB(请参阅下面的图例)
在进行优化时,MariaDB不会评估昂贵的子查询(这意味着,EXPLAIN总是很快)。 MySQL 5.6在这方面取得了一些进展,但其优化器仍然会评估某些种类的子查询(例如,用于范围谓词的标量上下文子查询)