strayMat / sndsTools

https://straymat.github.io/sndsTools/
Other
0 stars 2 forks source link

Comment fonctionne l'optimisation des requêtes sur le portail ? #10

Open strayMat opened 1 month ago

strayMat commented 1 month ago

Oracle semble avoir un optimisateur de query. On peut voir le plan sur oracle en lançant la requête "explain plan {query}".

Est-ce qu'il est plus rapide de mettre les filtres avant la jointure qu'après, c'est à dire :

delibrances <- ir_pha_r   %>% filter(
        sql(dis_dtd_condition),
        sql(soi_dtd_condition),
        sql(atc_conditions)
) %>%
      inner_join(er_prs_f, by = c("PHA_PRS_C13" = "PHA_CIP_C13") %>%
      inner_join(er_pha_f, by = dcir_join_keys)
ThomasSoeiro commented 1 month ago

Salut,

Oracle semble avoir un optimisateur de query. On peut voir le plan sur oracle en lançant la requête "explain plan {query}".

Malheureusement les profils 108 n'ont pas les droits pour voir les plans d'exécution. J'avais fait une demande en ce sens au support national mais ça avait été refusé. La raison était qu'on requête des vues avec des synonymes donc ils pensent que les plans d'exécution ne seront pas compréhensibles. Ce serait bien si d'autres utilisateurs fasse la demande pour que la Cnam soit informée que c'est un besoin pour plusieurs utilisateurs ?

Est-ce qu'il est plus rapide de mettre les filtres avant la jointure qu'après (...)

Je n'utilise pas {dbplyr} mais je suppose que c'est traduit de la même façon en SQL (ordre JOIN puis WHERE obligatoire, l'inverse est une erreur de syntaxe). Tu peux utiliser show_query() pour t'en assurer.

strayMat commented 1 month ago

Pour la demande au support, je la ferai également de mon côté pour qu'ils voient que d'autres utilisateurs en ont besoin. Merci pour le conseil du show_query, je vais regarder et mettre ce que ça donne ici :)

abelloir-zz commented 1 month ago

Merci pour les informations Thomas ! Je vais faire la demande de mon côté également. J'avais une autre question : est ce que tu sais si des INDEX sont utilisés sur la base de données Oracle ? Je ne connais pas le sujet mais j'avais cru comprendre que cela pouvait accélérer significativement les requêtes (je pensais notamment à des colonnes sur lesquelles on utilise fréquemment des filtres)

ThomasSoeiro commented 1 month ago

Oui, tu peux utiliser des index avec Oracle et ça peut significativement améliorer les temps d'exécution dans certains cas (je ne suis plus sûr dans quels cas donc je ne dis rien 😄 ). Attention, la création d'un index peut être longue, donc faut qu'il apporte un gain réel ensuite. Un exemple de création d'index avec une étude en cours (de mémoire ici ça ne faisait pas une différence extraordinaire, donc exemple pas forcément judicieux...)