|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() ![]() Inscription : décembre 2006 Messages : 73 ![]() |
Bonjour,
Est ce qu'une requête sur une table détails, doit être identique à celle de la création de la vue matérialisée utilisant cette table pour qu'elle soit réécrite en utilisant cette vue matérialisée? |
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 519 ![]() |
Non, en fait l'Optimizer va chercher à utiliser le QUERY REWRITE si :
Code :
SELECT a,b,c FROM t WHERE a=1 AND b=3; Code :
SELECT c,a,b FROM t WHERE b=3 AND a=1;
__________________
Pas de réponse aux messages privés. Faites un post pour vos problèmes, que tout le monde en profite...
|
|
|
00
|
|
|
#3 | ||||
|
Nouveau Membre du Club
![]() ![]() Inscription : décembre 2006 Messages : 73 ![]() |
merci pour ta réponse... mais je crois que je me suis mal exprimé.
pour être plus précis : Voici la requête de création de la vue matérialisée : Code :
Code :
pourriez vous m'indiquer sur quel niveau ça bloque? |
||||
|
|
00
|
|
|
#4 |
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 519 ![]() |
D'un point de vue analytique cela semble pouvoir fonctionner, maintenant il y a l'Optimizer qui peut considérer que passer par la table initiale va plus vite...
Tu peux tenter de forcer le REWRITE avec un HINT.
__________________
Pas de réponse aux messages privés. Faites un post pour vos problèmes, que tout le monde en profite...
|
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() ![]() Inscription : décembre 2006 Messages : 73 ![]() |
ça marche toujours pas... auriez vous une autre idée??
|
|
|
00
|
|
|
#6 |
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 519 ![]() |
Je ne suis pas spécialiste en QUERY REWRITE mais il se peut que ton CASE mette la grouille.
Tente la requête avec les éléments brut de force (A l'identique de ta vue matérialisée). ensuite par évolution change et teste ta requête afin d'arriver à tes fins. Tu verras bien où ça bloque...
__________________
Pas de réponse aux messages privés. Faites un post pour vos problèmes, que tout le monde en profite...
|
|
|
00
|
|
|
#7 |
|
Nouveau Membre du Club
![]() ![]() Inscription : décembre 2006 Messages : 73 ![]() |
je l'ai fait, mais une fois que j'enlève n'importe quel champ du select ça marche plus
|
|
|
00
|
|
|
#8 |
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 519 ![]() |
Essai bête et méchant, si tu n'enlève aucun champs et que tu ne fais que rajouter (Il suffit de ne pas traiter ceux en trop), ça donne quoi ?
__________________
Pas de réponse aux messages privés. Faites un post pour vos problèmes, que tout le monde en profite...
|
|
|
00
|
|
|
#9 |
|
Nouveau Membre du Club
![]() ![]() Inscription : décembre 2006 Messages : 73 ![]() |
ça marche toujours pas, mais là ça peut se comprendre puisque le champ demandé n'est pas disponible dans la vue matérialisée.
|
|
|
00
|
|
|
#10 |
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 519 ![]() |
En ce cas peux-tu déporter les éléments liés à ta vue matérialisée (select, from & where) dans une sous-requte ?
__________________
Pas de réponse aux messages privés. Faites un post pour vos problèmes, que tout le monde en profite...
|
|
|
00
|
|
|
#11 |
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 519 ![]() |
J'avais ma lu, il faut que TOUS tes champs de la table que tu veux bypasser soient dans la vue matérialisée...
Ici il te manque VOLM.
__________________
Pas de réponse aux messages privés. Faites un post pour vos problèmes, que tout le monde en profite...
|
|
|
00
|
|
|
#12 |
|
Nouveau Membre du Club
![]() ![]() Inscription : décembre 2006 Messages : 73 ![]() |
Le VOLM est dans le case
|
|
|
00
|
|
|
#13 |
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 519 ![]() |
Tu as SUM(VOLM) et non VOLM. Oracle ne peut traduire que le VOLM d'une requête correspond à une pseudo colonne calculée dans une vue matérialisée.
__________________
Pas de réponse aux messages privés. Faites un post pour vos problèmes, que tout le monde en profite...
|
|
|
00
|
|
|
#14 |
|
Nouveau Membre du Club
![]() ![]() Inscription : décembre 2006 Messages : 73 ![]() |
oui vous avez raison mais faites attention au 'AS':
SUM(VOLM) AS "VOLM" |
|
|
00
|
|
|
#15 |
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 519 ![]() |
C'est bien ce que je dis, dans ton CASE tu checke la valeur de VOLM (La colonne) et dans ta vue matérialisée tu fourni un SUM(VOLM) (Et pas la colonne VOLM elle-même).
Donc, il est normal qu'il aille chercher la colonne VOLM dans la table, et le reste avec. L'Oracle n'est ni un devin, ni un adepte des boules de crystal...
__________________
Pas de réponse aux messages privés. Faites un post pour vos problèmes, que tout le monde en profite...
|
|
|
00
|
|
|
#16 |
|
Nouveau Membre du Club
![]() ![]() Inscription : décembre 2006 Messages : 73 ![]() |
ok,
mais malgré cela ça marche pas, en fait, la requête de la vue matérialisée ne peut pas être réécrite, une fois qu'on enlève une colone du group by!!! |
|
|
00
|
|
|
#17 |
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 519 ![]() |
J'avais pas vu non lus, décidément, il faut effectivement que la vue matérialisée corresponde mathématiquement à une partie de ta requête. Si il faut triturer le résultat pour en sortir le besoin, elle ne sera pas prise en compte...
__________________
Pas de réponse aux messages privés. Faites un post pour vos problèmes, que tout le monde en profite...
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com