optim requete

optim requete - SQL/NoSQL - Programmation

Marsh Posté le 09-02-2009 à 11:01:32    

Bonjour,
 
Une question au specialiste d'oracle :
 
est ce que faire cette requete
 
select * from matable;
 
est la même chose que de faire
select * from
(select * from matable) matable;
 
en faite je veux savoir si un select imbriqué  
et la meme chose qu'un select simple ?
 
Merci

Reply

Marsh Posté le 09-02-2009 à 11:01:32   

Reply

Marsh Posté le 09-02-2009 à 13:03:06    

donny3 a écrit :

Bonjour,
 
Une question au specialiste d'oracle :
 
est ce que faire cette requete
 
select * from matable;
 
est la même chose que de faire
select * from
(select * from matable) matable;


Non, ce n'est pas la mmême chose...
La deuxième requête plante  :lol:  

donny3 a écrit :

en faite je veux savoir si un select imbriqué  
et la meme chose qu'un select simple ?
 
Merci


Non.
Le résultat sera le même, mais dans le deuxième cas, on fais un SELECT *, puis on fait un SELECT * du résultat, donc fatalement la requête est pllus gourmande...

Reply

Marsh Posté le 09-02-2009 à 13:55:09    

macgawel a écrit :


Non, ce n'est pas la mmême chose...
La deuxième requête plante  :lol:  


 
non ca ne plante pas.
 
 
en fait cela va dépendre de la complexité de ta requête, le mieux pour bien cerner cela est d'apprendre a comprendre le plan d'exécution, si les étapes ne sont pas dépendantes l'optimiseur pourrait tout faire en une passe.
Pour le cas que tu donnes ça doit être le cas.

Reply

Marsh Posté le 09-02-2009 à 14:27:44    

casimimir a écrit :

non ca ne plante pas.


Code :
  1. select * from
  2. (select * from matable) matable;

Et elle donnerait quel résultat ?  :whistle:

Reply

Marsh Posté le 09-02-2009 à 14:52:49    

macgawel a écrit :


Code :
  1. select * from
  2. (select * from matable) matable;

Et elle donnerait quel résultat ?  :whistle:


 
he bien l'équivalent de: select * from matable
je suis ptetre mal réveillé mais je ne vois pas ou est le prob

Reply

Marsh Posté le 09-02-2009 à 15:09:32    

Si je me trompe pas, le matable en rouge n'est donc pas un nom de table, mais ce serait un alias pour l'ensemble ramené par la sous-requête entre parenthèses. Comme il y a aussi une table qui s'appelle matable, cela ne rend pas la requête très claire.
 
Le résultat sera donc le même dans les deus cas, mais si on me laisse chosir, je prendrais la version select * from matable.

Reply

Marsh Posté le 09-02-2009 à 15:35:34    

SQL accepte un nom de table comme alias ?
Il faudra que je teste (encore que c'est d'une utilité restreinte...)

Reply

Marsh Posté le 09-02-2009 à 16:53:46    

ca marche sous oracle, mais la vraie question est : quel est le plan d'exécution ?
j'ai fais un test sur une table de moins de 100 lignes, avec une base en mode CHOOSE :

Code :
  1. SQL> select * from (select * from prodex.news) ;
  2. 93 rows selected.
  3. Execution Plan
  4. ----------------------------------------------------------
  5.    0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=3 Card=89 Bytes=13083)
  6.    1    0   TABLE ACCESS (FULL) OF 'NEWS' (TABLE) (Cost=3 Card=89 Bytes=13083)


 
le plan d'exécution est le même qu'un "select *" à savoir un accès full à la table.... donc pour Oracle ca la même chose

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed