Для SAP HANA материализация промежуточный набор результатов обычно не улучшает производительность; напротив, SAP HANA стремится материализоваться как можно позже, чтобы обрабатывать данные в более компактном внутреннем представлении.
Что вы, вероятно, хотели бы видеть, так это то, что общие табличные выражения, которые используются в нескольких местах в вашем запросе, не выполняются повторно для каждой ссылки.
Эта оптимизация называется «совместное использование подплана» в SAP HANA и активна по умолчанию.
Просмотр вывода EXPLAIN PLAN
может проверить, использует ли запрос «совместное использование подплана»:
OPERATOR_NAME OPERATOR_DETAILS
...
ROW SEARCH KF_MED.MKF1, KF_MED.MKF2, KF_DAT.MKF1,
[...]
COLUMN SEARCH KF_MED.MKF1, KF_MED.MKF2, FACT.KF1, FACT.KF2 ...
FILTER FACT.KF2 <> KF_MED.MKF2 OR KF_MED.MKF2 IS NULL OR FACT.KF2 IS NULL ...
JOIN JOIN CONDITION: (INNER many-to-one) FACT.KF1 = KF_MED.MKF1 ...
COLUMN TABLE ...
ROW SEARCH KF_MED.MKF1, KF_MED.MKF2 ...
VIEW PROJECT COLS: KF_MED.MKF1, KF_MED.MKF2, ...
===> (SHARED SUBPLAN) SUBPLAN OPERATOR_ID : 9 ...
VIEW PROJECT COLS: KF_MED.MKF1, KF_MED.MKF2, ...
===> (SHARED SUBPLAN) SUBPLAN OPERATOR_ID : 9
См. Две строки, отмеченные ===>
выше.
В случае, если оптимизатор не решит использовать «совместное использование подплана», вы можете попытаться использовать подсказку, чтобы указать, что это желаемое поведение:
SELECT * FROM T1 WITH HINT( SUBPLAN_SHARING );
Однако, прежде чем пытаться «заставить» оптимизатор что-либо сделать, убедитесь, что понимаете, что происходит в данный момент. Подсказки - это технический долг в вашем коде, и его следует избегать, если это возможно.