2010-06-03 5 views
1

S'il vous plaît expliquer. A) "affacturage sous-requête" est utilisé pour remplacer une sous-requête non corrélée. Qu'en est-il de la sous-requête corrélée? Existe-t-il un moyen de déplacer une sous-requête corrélée vers la section de clause 'WITH'? B) sont "sous-requête" "sous-requête affacturage" exécuté exactement une fois?questions d'affacturage sous-requête

c) "sous-requête" vs "affacturage sous-requête" que l'on est mieux

Merci.

Répondre

2

Vous pouvez utiliser la factorisation de sous-requêtes pour remplacer une sous-requête non corrélée.
Comment allez-vous le faire pour une sous-requête corrélée?

Je ne comprends pas la partie (b), pouvez-vous reformuler?
Vous devinez ce que vous voulez dire: une sous-requête dans la clause WITH est généralement exécutée une seule fois avant l'exécution de la requête principale.

Pour les jeux de données volumineux, l'affacturage de sous-requêtes est évidemment préférable, car vous n'exécutez la sous-requête qu'une seule fois dans la plupart des cas, voire dans tous les cas. Pour les ensembles de données plus petits, le temps de création des tables temporaires peut prendre plus de temps que la requête réelle. En dehors des problèmes de performances mentionnés ci-dessus, l'affacturage de sous-requête génère un code beaucoup plus propre et facile à entretenir.

+0

"une sous-requête dans la clause WITH est généralement exécutée une seule fois avant l'exécution de la requête principale." La factorisation de sous-requêtes est donc exécutée indépendamment et exactement une fois. Il ne peut donc pas être utilisé pour remplacer complètement les sous-requêtes corrélées. – Sujee

+0

Je ne vois aucun moyen possible de mettre une sous-requête corrélée dans la clause WITH. Une sous-requête corrélée est une sous-requête qui nécessite des valeurs de la requête principale pour être exécutée. – bernie

+0

Merci Adam Bernier. – Sujee

1

Par le terme "affacturage sous-requête" voulez-vous vraiment dire re factorisation en utilisant une sous-requête? Le refactoring est le processus consistant à modifier une routine pour améliorer la maintenance et la lisibilité sans en altérer le résultat. Il y a des moments où l'on ne peut pas refactoriser une sous-requête dans une expression de table commune (en clause "WITH"). De plus, il n'y a pas de règle d'or pour toujours utiliser un CTE ou toujours utiliser une sous-requête (ou une table dérivée). Cela dépend des données et du SGBD quant à l'approche qui fonctionnera le mieux.

+0

Dans ma question, "affacturage de sous-requête" signifie l'utilisation de la clause "WITH" pour remplacer la sous-requête traditionnelle. – Sujee