Retourner à la version anglaise de la documentationProblèmes de performance dans les requêtes avec sous-requêtes dans la Data Virtualization
Problèmes de performance dans les requêtes avec sous-requêtes dans la Data Virtualization
Dernière mise à jour : 26 nov. 2024
Si vous exécutez une requête contenant des sous-requêtes, vous pouvez rencontrer des problèmes de performances.
Symptômes
Vous exécutez une requête qui comporte des sous-requêtes, mais la requête prend trop de temps pour renvoyer les résultats.Résolution du problème
Pour résoudre ce problème,
- Si l'extraction parallèle de pseudonymes est activée, accédez au plan d'accès généré.
- Vérifiez que votre sous-requête est réécrite dans une jointure dans l'instruction SQL, comme illustré dans l'exemple suivant.
- Instruction SQL d'origine
SELECT A5."CD_GENDER" C0, A5."CD_MARITAL_STATUS" C1, A5."CD_EDUCATION_STATUS" C2, A5."CD_PURCHASE_ESTIMATE" C3, A5."CD_CREDIT_RATING" C4, A5."CD_DEP_COUNT" C5, A5."CD_DEP_EMPLOYED_COUNT" C6, A5."CD_DEP_COLLEGE_COUNT" C7 FROM "TPCDS1TB"."CUSTOMER_ADDRESS" A1, "TPCDS1TB"."CUSTOMER" A2, "TPCDS1TB"."CUSTOMER_DEMOGRAPHICS" A5 WHERE (A1."CA_COUNTY" IN ('Allen County', 'Rock County', 'Modoc County', 'Yamhill County', 'Lee County')) AND (A2."C_CURRENT_ADDR_SK" = A1."CA_ADDRESS_SK") AND (1 = (SELECT DISTINCT 1 FROM "TPCDS1TB"."STORE_SALES" A3, "TPCDS1TB"."DATE_DIM" A4 WHERE (A2."C_CUSTOMER_SK" = A3."SS_CUSTOMER_SK") AND (A3."SS_SOLD_DATE_SK" = A4."D_DATE_SK") AND (A4."D_YEAR" = 1999) AND (2 <= A4."D_MOY") AND (A4."D_MOY" <= 5) ))
- Instruction SQL réécrite
(SELECT Q3.CD_GENDER, Q3.CD_MARITAL_STATUS, Q3.CD_EDUCATION_STATUS, Q3.CD_PURCHASE_ESTIMATE, Q3.CD_CREDIT_RATING, Q3.CD_DEP_COUNT, Q3.CD_DEP_EMPLOYED_COUNT, Q3.CD_DEP_COLLEGE_COUNT FROM TPCDS1TB.CUSTOMER_ADDRESS AS Q1, TPCDS1TB.CUSTOMER AS Q2, TPCDS1TB.CUSTOMER_DEMOGRAPHICS AS Q3, (SELECT DISTINCT 1 FROM TPCDS1TB.DATE_DIM AS Q4, TPCDS1TB.STORE_SALES AS Q5 WHERE (Q4.D_MOY <= 5) AND (2 <= Q4.D_MOY) AND (Q4.D_YEAR = 1999) AND (Q5.SS_SOLD_DATE_SK = Q4.D_DATE_SK) AND (Q2.C_CUSTOMER_SK = Q5.SS_CUSTOMER_SK) ) AS Q6,
- À la fin de toutes les valeurs du paramètre DB2_DV_OVERRIDES, ajoutez la valeur NON_QPPD_MPP. Par exemple, si les valeurs en cours du paramètre DB2_DV_OVERRIDES sont les suivantes :
DB2_DV_OVERRIDES=EN_OJMQT,EN_JOINFILTER,EN_GAIANQUERY_JOINFILTER,
Une fois que vous avez ajouté la valeur NON_QPPD_MPP, les valeurs des paramètres sont affichées dans l'exemple suivant.DB2_DV_OVERRIDES=EN_OJMQT,EN_JOINFILTER,EN_GAIANQUERY_JOINFILTER,NO_SBQPPD_MPP
Vous pouvez définir le paramètre DB2_DV_OVERRIDES au niveau de l'instance, de sorte que le paramètre s'applique à toutes les requêtes ou au niveau de la requête, de sorte que le paramètre s'applique à une requête particulière. Pour ce faire, vous pouvez appliquer des profils d'optimisation (OPTGUIDELINE) à une requête spécifique. Pour plus d'informations, voir Variables de registre du compilateur SQL dans un profil d'optimisation.