Définir les cardinalités de jointure
Lorsque vous définissez une jointure, vous pouvez éventuellement définir la cardinalité pour décrire la relation entre les deux sources de données, c'est-à-dire 1..1, 1..n, n..1 et n..m.

Nous vous recommandons de toujours définir des cardinalités de jointure afin que l'optimiseur puisse décider si les jointures peuvent être omises au moment de l'exécution en fonction de la requête envoyée à la vue de calcul.
Si les tables sont utilisées comme sources de données et non comme vues de calcul, vous pouvez utiliser l'option Proposer cardinalité.
Attention
Avec une définition de jointure incluant des cardinalités, et sous des conditions supplémentaires, l'instanciation de la vue de calcul peut élaguer automatiquement une source de données impliquée dans un nœud de jointure. Examinons les conditions suivantes :

Le principe clé appliqué par l'optimiseur SQL est qu'il va élaguer une source jointe, en fonction du type de jointure et des cardinalités, uniquement si cela ne peut pas affecter l'ensemble de résultats. En d'autres termes, chaque fois que l'ensemble de résultats peut être différent selon que la jointure est exécutée ou non, la jointure est exécutée.
Attention
Voyons comment les cardinalités et le type de jointure permettent réellement à l'optimiseur de tailler.

Dans les trois exemples, basés sur le même scénario de point de départ, aucune colonne de la table de droite n'est demandée.
Dans le cas d'une jointure externe gauche, la table droite R peut être ignorée car la cardinalité 1..1 indique à l'optimiseur que l'exécution de la jointure n'aura pas d'impact sur l'ensemble de résultats. En effet, pour chaque rangée en L, il y aurait au plus un match en R.
Dans le deuxième exemple, en utilisant une jointure gauche mais une cardinalité 1..n, c'est l'inverse. Aucun élagage ne peut avoir lieu car la jointure peut correspondre à plus d'une ligne de R avec chaque ligne de L.
Enfin, dans le cas d'une jointure externe droite, il n'est pas possible de élaguer la table de droite, quelle que soit la cardinalité. En effet, il n'est pas possible de savoir quelles lignes de L doivent être conservées dans l'ensemble de résultats sans exécuter la jointure.
Type de jointure référentielle
Parmi les types de jointure, l'un est appelé Référentiel. Lorsque vous utilisez une jointure référentielle, vous indiquez à l'optimiseur que toute ligne d'une source a toujours une correspondance dans l'autre source. Par exemple, le poste de vente aura toujours un en-tête. Vous indiquez également si cette propriété est vraie pour la source gauche, la source droite ou les deux ; cette opération s'effectue avec la colonne Contrainte d'intégrité.

La jointure référentielle peut être considérée comme une jointure interne prenant en charge l'optimisation. Avec la cardinalité réelle définie, elle renvoie toujours le même ensemble de résultats qu'une jointure interne et utilise la contrainte d'intégrité (en plus des autres paramètres généraux de conditions d'élagage mentionnés précédemment) pour décider si l'exécution de la jointure peut être ignorée (et une table élaguée) pour augmenter les performances.
Remarque
Recommandations générales sur les jointures

Les jointures sont une source potentielle d'amélioration des performances. Assurez-vous de prendre en compte toutes les recommandations lors de la définition des jointures pour vous assurer d'obtenir les meilleures performances à partir de vos vues calculées.
Optimisation de la colonne de jointure
Nous avons déjà abordé l'élagage des sources de données dans une jointure, mais vous devriez en apprendre davantage sur une autre possibilité d'optimisation. Dans la source de données restante, la colonne qui faisait partie de la jointure peut-elle également être élaguée ?
Arrière-plan - Comportement par défaut
Par défaut, la colonne sur laquelle une jointure est définie sera toujours incluse dans le résultat, que la colonne ait été demandée ou non par la requête.
Cela permet de garantir un comportement d'agrégation cohérent concernant la zone de jointure, même si la zone n'est pas demandée par la requête. Si ce comportement d'agrégation change en fonction des colonnes demandées, cela peut entraîner une modification des valeurs de mesures qui en résultent.
Option Optimiser les colonnes de jointure
Lorsque vous cochez la case Optimiser les colonnes de jointure, vous indiquez au moteur de calcul que, si un partenaire de jointure est élagué, vous ne vous attendez pas à des modifications de l'ensemble de résultats selon que la colonne jointe de la source de données interrogée est utilisée ou non pour l'agrégation. Cela dépend fortement du type d'agrégations effectuées par la vue calculée. En particulier, la fonction d'agrégat SUM n'est pas sensible au niveau de regroupement, alors que les MAX ou MIN sont sensibles.
Quand l'élagage de jointure se produit-il ?
Lorsque l'option Optimiser les colonnes de jointure est active, l'élagage des colonnes de jointure entre deux sources de données, A et B, se produit lorsque les quatre conditions suivantes sont remplies :
Le type de jointure est Référentiel, Externe ou Texte (en fait, la vue de calcul ne peut pas être créée si le type de jointure est Interne).
Seules les colonnes d'un partenaire de jointure, A, sont demandées.
La colonne de jointure de A n'est PAS demandée par la requête.
La cardinalité côté B (côté du partenaire de jointure à partir duquel aucune colonne n'est demandée) est ..1.
Attention
Greedy Join Pruning
SAP HANA Cloud QRC 3/2022 a introduit un nouveau type d'optimisation des jointures appelé Greedy Join Pruning. Il permet à l'optimiseur SQL d'élaguer une source jointe si elle n'est pas du tout interrogée (aucune colonne demandée), quels que soient les paramètres de cardinalités et de type de jointure. Cela peut considérablement améliorer la durée d'exécution de la requête. Cependant, vous devez l'utiliser uniquement lorsque les résultats attendus ne dépendent pas de l'exécution ou non de la jointure.
Pour ce faire, vous définissez l'option Pruning gourmand d'une jointure sur Gauche, Droite ou Les deux. Gauche ou Droite font référence à la source jointe qui peut être élaguée en mode gourmand.
Remarque
Greedy Pruning peut être défini à trois niveaux différents :

Pruning gourmand à différents niveaux
| Niveau | Priorité | Comment activer l'élagage gourmand |
|---|---|---|
| Une jointure d'une vue calculée | 3 | Dans l'onglet Définition de jointure, dans le volet Propriétés, utilisez la liste déroulante Pruning rapide. |
| Toutes les jointures d'une vue calculée | 2 | Dans la sémantique, affichez l'onglet Propriétés de la vue > Avancé. Sélectionnez ensuite Ajouter notes d'exécution, recherchez élagage et sélectionnez l'option d'élagage gourmande souhaitée. |
| Toutes les vues de calcul utilisées dans une requête SQL | 1 | Dans votre requête SQL, ajoutez la clause d'astuce suivante : SELECT <...> FROM <...> ('PLACEHOLDER' = ('ce_settings', '{"greedy_join_pruning": "<value>"}')Les valeurs sont les suivantes :
|
La colonne de priorité de la table précédente signifie que, par exemple, un paramètre d'élagage gourmand défini pour une vue calculée entière remplace tout paramètre d'élagage gourmand défini dans l'une de ses jointures. De même, un indice d'élagage gourmand dans une requête SQL remplace tout paramètre défini pour l'ensemble de la vue de calcul ou dans une jointure spécifique.