Я провел следующий эксперимент.
Запрос 1:
select f1, f2 from A where id = 10 limit 1
| f1 | f2 |
--------------
| 1 | 2 |
Запрос 2:
select * from B as b where b.f1 = 1 and b.f2 = 2 limit 1
И Query 1, и Query 2 выполняются очень быстро.
Однако, когда я сделал следующее
select B.*
from B join A
on B.f1 = A.f1 and B.f2 = A.f2
where A.id = 10 limit 1
Он работает медленно со многими этапами и задачами ...
Я предполагал, что последний запрос будет не намного дороже, чем запрос1 и запрос 2, заданный «предел 1».Его план похож на следующий.Означает ли это, что предел 1 используется только после того, как все соединения завершены ...?
== Optimized Logical Plan ==
GlobalLimit 1
+- LocalLimit 1
+- Join Inner, ((obj_id#352L = obj_id#342L) && (obj_type#351 = obj_type#341))
:- Project [uid#350L, obj_type#351, obj_id#352L]
: +- Filter ...
: +- Relation[...] parquet
+- Aggregate [obj_id#342L, obj_type#341], [obj_id#342L, obj_type#341]
+- Project [obj_type#341, obj_id#342L]
+- Filter ...
+- Relation[...] parquet