[ORACLE-SQL] Optimisation d'une vue

Optimisation d'une vue [ORACLE-SQL] - SQL/NoSQL - Programmation

Marsh Posté le 29-11-2002 à 08:54:49    

J'ai une vue qui comporte beaucoup de table et donc de jointure. Le problème c'est que les tables comporte de plus en plus de données et les temps de réponse explose. Comment faire pour l'optimisé alors qu'il n'y a que des jointures? Si je la sépare en plusieur vue que je regroupe ensuite en une seule, les perfs seront-elles meilleur?

Reply

Marsh Posté le 29-11-2002 à 08:54:49   

Reply

Marsh Posté le 29-11-2002 à 10:39:55    

C'est une vue dans ce genre là ?
 

Code :
  1. CREATE OR REPLACE VIEW ERES105
  2. AS
  3. SELECT  ResPvResultat.Robid ResPvResultat_Robid,
  4. RefConcours.NumeroSequence Num_Concours,
  5. RefConcours.Designation ,
  6. RefEpreuve.NomPrix ,
  7. RefEpreuve.NumeroSequence Num_Epreuve,
  8. RefEpreuve.Robid Epreuve_Robid ,
  9. RefDiscipline.Code "Discipline" ,
  10. Refengagement.ORDREPASSAGE num_depart ,
  11. RefCheval.NumeroSire ,
  12. RefCheval.Nom ,
  13. RefLicencie.Nom || ' ' || RefLicencie.Prenom Licencie,
  14. RefLicencie.LicenceDnseFfe ,
  15. ResPerfCSOHunter.Engagement_Robid ,
  16. 'Temps (s)' Champ1 ,
  17. to_char(ResPerfCSOHunter.Temps / 100) Valeur_Champ1 ,
  18. '' Champ2 ,
  19. '' Valeur_Champ2 ,
  20. '' Champ3 ,
  21. '' Valeur_Champ3 ,
  22. '' Champ4 ,
  23.  '' Valeur_Champ4 ,
  24. ResPerfCSOHunter.POINTS ,
  25. (ResPerfCSOHunter.GAINS / 100) GAINS,
  26. (ResPerfCSOHunter.PRIME / 100) PRIME,
  27. ResPerfCSOHunter.PLACE ,
  28. ResPvResultat.NbEngagements ,
  29. ResPVResultat.NBPARTANT ,
  30. ResPVResultat.NBFORFAITS ,
  31. ResPVResultat.NBNONPARTANT  ,
  32. ResPVResultat.NbPrix ,
  33. ResPVResultat.SommeDistribuee SOMMEDISTRIBUEE ,
  34. RefConcours.DateDebut ,
  35. RefClasseEpreuve.Code ,
  36. RefCauseNonPartant.Code CauseNonPartant ,
  37. DECODE(TO_CHAR(RefEngagement.NumeroEquipe), '0', null, TO_CHAR(RefEngagement.NumeroEquipe)) NumeroEquipe, RefEngagement.NomEquipe
  38. FROM ResPerfCSOHunter , RefEpreuve , RefConcours , RefEngagement , RefDetailEngagement ,
  39. RefEngCheval , RefCheval  ,
  40. RefEngCompetiteur , RefCompetiteur , RefLicencie ,
  41. ResPvResultat , RefClasseEpreuve  , RefDiscipline , RefCauseNonPartant
  42. WHERE RefDiscipline.Code = 'SO'
  43. AND RefEpreuve.Concours_Robid = RefConcours.Robid
  44. AND RefConcours.Discipline_Robid = RefDiscipline.Robid
  45. AND ResPvResultat.Epreuve_Robid = RefEpreuve.Robid
  46. AND RefEngagement.Epreuve_robid  = RefEpreuve.robid
  47. AND ResPerfCSOHunter.ENGAGEMENT_ROBID = RefEngagement.Robid
  48. AND RefDetailEngagement.Engagement_Robid = RefEngagement.Robid
  49. AND RefDetailEngagement.Robid = RefEngCheval.DetailEngagement_Robid
  50. AND RefEngCheval.Cheval_Robid = RefCheval.Robid
  51. AND RefDetailEngagement.Robid = RefEngCompetiteur.DetailEngagement_Robid (+)
  52. AND RefEngCompetiteur.Competiteur_Robid = RefCompetiteur.Robid (+)
  53. AND RefCompetiteur.EstUnLicencie_Robid = RefLicencie.Robid (+)
  54. AND ResPerfCSOHunter.CAUSENONPARTANT_ROBID  = RefCauseNonPartant.ROBID (+)
  55. AND RefClasseEpreuve.Robid = RefEpreuve.ClasseEpreuve_Robid
  56. UNION
  57. SELECT ResPvResultat.Robid ResPvResultat_Robid,
  58. RefConcours.NumeroSequence Num_Concours,
  59. RefConcours.Designation ,
  60. RefEpreuve.NomPrix ,
  61. RefEpreuve.NumeroSequence Num_Epreuve,
  62. RefEpreuve.Robid Epreuve_Robid ,
  63. RefDiscipline.Code "Discipline" ,
  64. Refengagement.ORDREPASSAGE num_depart ,
  65. RefCheval.NumeroSire ,
  66. RefCheval.Nom ,
  67. RefLicencie.Nom || ' ' || RefLicencie.Prenom Licencie,
  68. RefLicencie.LicenceDnseFfe ,
  69. ResPerfDressage.Engagement_Robid ,
  70. 'Pourcentage' Champ1 ,
  71. to_char(ResPerfDressage.Pourcentage / 100) Valeur_Champ1 ,
  72. '' Champ2 ,
  73. '' Valeur_Champ2 ,
  74. '' Champ3 ,
  75. '' Valeur_Champ3 ,
  76. '' Champ4 ,
  77.  '' Valeur_Champ4 ,
  78. ResPerfDressage.POINTS ,
  79. (ResPerfDressage.GAINS/100) GAINS,
  80. (ResPerfDressage.PRIME/100) PRIME,
  81. ResPerfDressage.PLACE ,
  82. ResPvResultat.NbEngagements ,
  83. ResPVResultat.NBPARTANT ,
  84. ResPVResultat.NBFORFAITS ,
  85. ResPVResultat.NBNONPARTANT  ,
  86. ResPVResultat.NbPrix ,
  87. ResPVResultat.SommeDistribuee SOMMEDISTRIBUEE,
  88. RefConcours.DateDebut ,
  89. RefClasseEpreuve.Code ,
  90. RefCauseNonPartant.Code CauseNonPartant,
  91. DECODE(TO_CHAR(RefEngagement.NumeroEquipe), '0', null, TO_CHAR(RefEngagement.NumeroEquipe)) NumeroEquipe, RefEngagement.NomEquipe
  92. FROM ResPerfDressage , RefEngCompetiteur ,
  93. RefEngCheval , RefDetailEngagement , RefEngagement , RefEpreuve , ResPvResultat ,
  94. RefCheval  ,
  95. RefLicencie , RefCompetiteur , RefConcours ,
  96. RefClasseEpreuve ,  RefDiscipline , RefCauseNonPartant
  97. WHERE RefDiscipline.Code = 'DR'
  98. AND RefConcours.Discipline_Robid = RefDiscipline.Robid
  99. AND RefEpreuve.Concours_Robid = RefConcours.Robid
  100. AND RefEngagement.Epreuve_robid  = RefEpreuve.robid
  101. AND ResPvResultat.Epreuve_Robid = RefEpreuve.Robid
  102. AND ResPerfDressage.ENGAGEMENT_ROBID = RefEngagement.Robid
  103. AND RefDetailEngagement.Engagement_Robid = RefEngagement.Robid
  104. AND RefDetailEngagement.Robid = RefEngCheval.DetailEngagement_Robid
  105. AND RefEngCheval.Cheval_Robid = RefCheval.Robid
  106. AND RefDetailEngagement.Robid = RefEngCompetiteur.DetailEngagement_Robid (+)
  107. AND RefEngCompetiteur.Competiteur_Robid = RefCompetiteur.Robid (+)
  108. AND RefCompetiteur.EstUnLicencie_Robid = RefLicencie.Robid (+)
  109. AND ResPerfDressage.CAUSENONPARTANT_ROBID = RefCauseNonPartant.ROBID  (+)
  110. AND RefClasseEpreuve.Robid = RefEpreuve.ClasseEpreuve_Robid
  111. UNION
  112. SELECT  ResPvResultat.Robid ResPvResultat_Robid,
  113. RefConcours.NumeroSequence Num_Concours,
  114. RefConcours.Designation ,
  115. RefEpreuve.NomPrix ,
  116. RefEpreuve.NumeroSequence Num_Epreuve,
  117. RefEpreuve.Robid Epreuve_Robid ,
  118. RefDiscipline.Code "Discipline" ,
  119. Refengagement.ORDREPASSAGE num_depart ,
  120. RefCheval.NumeroSire ,
  121. RefCheval.Nom ,
  122. RefLicencie.Nom || ' ' || RefLicencie.Prenom Licencie,
  123. RefLicencie.LicenceDnseFfe ,
  124. ResPerfCCE.Engagement_Robid ,
  125. 'Pts Dressage' Champ1 ,
  126. to_char( ResPerfCCE.POINTSDRESSAGE) Valeur_Champ1,
  127. 'Pts Steeple' Champ2 ,
  128. to_char(ResPerfCCE.POINTSSTEEPLE)  Valeur_Champ2 ,
  129. 'Pts Fond' Champ3 ,
  130. to_char(ResPerfCCE.POINTSFOND) Valeur_Champ3 ,
  131. 'Pts CSO' Champ4 ,
  132. to_char(ResPerfCCE.POINTSCSO)  Valeur_Champ4 ,
  133. ResPerfCCE.POINTS ,
  134. (ResPerfCCE.GAINS/100) GAINS,
  135. (ResPerfCCE.PRIME/100) PRIME,
  136. ResPerfCCE.PLACE ,
  137. ResPvResultat.NbEngagements ,
  138. ResPVResultat.NBPARTANT ,
  139. ResPVResultat.NBFORFAITS ,
  140. ResPVResultat.NBNONPARTANT  ,
  141. ResPVResultat.NbPrix ,
  142. ResPVResultat.SommeDistribuee  SOMMEDISTRIBUEE,
  143. RefConcours.DateDebut ,
  144. RefClasseEpreuve.Code ,
  145. RefCauseNonPartant.Code CauseNonPartant ,
  146. DECODE(TO_CHAR(RefEngagement.NumeroEquipe), '0', null, TO_CHAR(RefEngagement.NumeroEquipe)) NumeroEquipe, RefEngagement.NomEquipe
  147. FROM ResPerfCCE ,
  148. RefEpreuve , RefConcours , RefEngagement , RefDetailEngagement ,
  149. RefEngCheval , RefCheval  ,
  150. RefEngCompetiteur , RefCompetiteur , RefLicencie ,
  151. RefDiscipline , ResPvResultat , RefClasseEpreuve , RefCauseNonPartant
  152. WHERE RefDiscipline.Code = 'CE'
  153. AND RefConcours.Discipline_Robid = RefDiscipline.Robid
  154. AND RefEpreuve.Concours_Robid = RefConcours.Robid
  155. AND RefEngagement.Epreuve_robid  = RefEpreuve.robid
  156. AND ResPvResultat.Epreuve_Robid = RefEpreuve.Robid
  157. AND ResPerfCCE.ENGAGEMENT_ROBID = RefEngagement.Robid
  158. AND RefDetailEngagement.Engagement_Robid = RefEngagement.Robid
  159. AND RefDetailEngagement.Robid = RefEngCheval.DetailEngagement_Robid
  160. AND RefEngCheval.Cheval_Robid = RefCheval.Robid
  161. AND RefDetailEngagement.Robid = RefEngCompetiteur.DetailEngagement_Robid (+)
  162. AND RefEngCompetiteur.Competiteur_Robid = RefCompetiteur.Robid (+)
  163. AND RefCompetiteur.EstUnLicencie_Robid = RefLicencie.Robid (+)
  164. AND ResPerfCCE.CAUSENONPARTANT_ROBID  = RefCauseNonPartant.ROBID (+)
  165. AND RefClasseEpreuve.Robid = RefEpreuve.ClasseEpreuve_Robid
  166. UNION
  167. SELECT ResPvResultat.Robid ResPvResultat_Robid,
  168. RefConcours.NumeroSequence Num_Concours,
  169. RefConcours.Designation ,
  170. RefEpreuve.NomPrix ,
  171. RefEpreuve.NumeroSequence Num_Epreuve,
  172. RefEpreuve.Robid Epreuve_Robid ,
  173. RefDiscipline.Code "Discipline" ,
  174. Refengagement.ORDREPASSAGE num_depart ,
  175. RefCheval.NumeroSire ,
  176. RefCheval.Nom ,
  177. RefLicencie.Nom || ' ' || RefLicencie.Prenom Licencie,
  178. RefLicencie.LicenceDnseFfe ,
  179. ResDetailPerfat.Engagement_Robid ,
  180. 'Pts Dressage' Champ1 ,
  181. to_char( ResDetailPerfat.POINTSDRESSAGE) Valeur_Champ1,
  182. 'Pts Presentation' Champ2 ,
  183. to_char(ResDetailPerfat.PointsPresentation)  Valeur_Champ2 ,
  184. 'Pts Marathon' Champ3 ,
  185. to_char(ResDetailPerfat.PointsMarathon) Valeur_Champ3 ,
  186. 'Pts SO' Champ4 ,
  187. to_char(ResDetailPerfat.POINTSOBSTACLE)  Valeur_Champ4 ,
  188. ResDetailPerfat.POINTS ,
  189. (ResDetailPerfat.GAINSCHEVAL/100) GAINS,
  190. (ResDetailPerfat.PRIME/100) PRIME,
  191. ResDetailPerfat.PLACE ,
  192. ResPvResultat.NbEngagements ,
  193. ResPVResultat.NBPARTANT ,
  194. ResPVResultat.NBFORFAITS ,
  195. ResPVResultat.NBNONPARTANT  ,
  196. ResPVResultat.NbPrix ,
  197. ResPVResultat.SommeDistribuee SOMMEDISTRIBUEE,
  198. RefConcours.DateDebut ,
  199. RefClasseEpreuve.Code ,
  200. RefCauseNonPartant.Code CauseNonPartant ,
  201. DECODE(TO_CHAR(RefEngagement.NumeroEquipe), '0', null, TO_CHAR(RefEngagement.NumeroEquipe)) NumeroEquipe, RefEngagement.NomEquipe
  202. FROM ResDetailPerfat ,ResPerfAttelage,
  203. RefEpreuve , RefConcours , RefEngagement , RefDetailEngagement ,
  204. RefEngCheval , RefCheval  ,
  205. RefEngCompetiteur , RefCompetiteur , RefLicencie ,
  206. ResPvResultat  , RefClasseEpreuve , RefDiscipline ,  RefCauseNonPartant
  207. WHERE ResPvResultat.Epreuve_Robid = RefEpreuve.Robid
  208. AND RefEpreuve.Concours_Robid = RefConcours.Robid
  209. AND RefConcours.Discipline_Robid = RefDiscipline.Robid
  210. AND RefDiscipline.Code = 'AT'
  211. AND ResPerfAttelage.ENGAGEMENT_ROBID     = RefEngagement.Robid
  212. AND ResDetailPerfat.Cheval_Robid      = RefCheval.Robid
  213. AND ResDetailPerfat.PerfAttelage_Robid   = ResPerfAttelage.robid
  214. --AND ResDetailPerfat.ENGAGEMENT_ROBID     = RefEngagement.Robid
  215. AND RefEngagement.Epreuve_robid          = RefEpreuve.robid
  216. AND RefDetailEngagement.Engagement_Robid = RefEngagement.Robid
  217. AND RefDetailEngagement.Robid            = RefEngCheval.DetailEngagement_Robid
  218. AND RefEngCheval.Cheval_Robid            = RefCheval.Robid
  219. AND RefDetailEngagement.Robid            = RefEngCompetiteur.DetailEngagement_Robid (+)
  220. AND RefEngCompetiteur.Competiteur_Robid  = RefCompetiteur.Robid (+)
  221. AND RefCompetiteur.EstUnLicencie_Robid   = RefLicencie.Robid (+)
  222. AND ResDetailPerfat.CAUSENONPARTANT_ROBID  = RefCauseNonPartant.ROBID (+)
  223. AND RefClasseEpreuve.Robid = RefEpreuve.ClasseEpreuve_Robid
  224. UNION
  225. SELECT ResPvResultat.Robid ResPvResultat_Robid,
  226. RefConcours.NumeroSequence Num_Concours,
  227. RefConcours.Designation ,
  228. RefEpreuve.NomPrix ,
  229. RefEpreuve.NumeroSequence Num_Epreuve,
  230. RefEpreuve.Robid Epreuve_Robid ,
  231. RefDiscipline.Code "Discipline" ,
  232. 0 num_depart,
  233. RefCheval.NumeroSire ,
  234. RefCheval.Nom ,
  235. RefLicencie.Nom || ' ' || RefLicencie.Prenom Licencie,
  236. RefLicencie.LicenceDnseFfe ,
  237. 0 ,
  238. '' Champ1 ,
  239. '' Valeur_Champ1,
  240. '' Champ2 ,
  241. ''  Valeur_Champ2 ,
  242. '' Champ3 ,
  243. '' Valeur_Champ3 ,
  244. '' Champ4 ,
  245. '' Valeur_Champ4 ,
  246. 0 ,
  247. (ResPerfInter.GAINS) GAINS,
  248. ((ResPerfInter.PRIMEHN + ResPerfInter.PRIMEDNSE)) PRIME,
  249. ResPerfInter.PLACE ,
  250. ResPvResultat.NbEngagements ,
  251. ResPVResultat.NBPARTANT ,
  252. ResPVResultat.NBFORFAITS ,
  253. ResPVResultat.NBNONPARTANT  ,
  254. ResPVResultat.NbPrix ,
  255. ResPVResultat.SommeDistribuee SOMMEDISTRIBUEE,
  256. RefConcours.DateDebut ,
  257. RefClasseEpreuve.Code ,
  258. NULL CauseNonPartant ,
  259. '' NumeroEquipe, ''
  260. FROM ResPerfInter ,
  261. RefEpreuve , RefConcours ,
  262. RefCheval  ,
  263. RefCompetiteur , RefLicencie ,
  264. ResPvResultat  , RefClasseEpreuve , RefDiscipline
  265. WHERE ResPvResultat.Epreuve_Robid = RefEpreuve.Robid
  266. AND RefEpreuve.Concours_Robid = RefConcours.Robid
  267. AND RefConcours.Discipline_Robid = RefDiscipline.Robid
  268. AND ResperfInter.epreuve_robid      = Refepreuve.robid
  269. AND ResperfInter.cheval_robid      = RefCheval.Robid
  270. AND ResperfInter.Competiteur_Robid       = RefCompetiteur.Robid (+)
  271. AND RefCompetiteur.EstUnLicencie_Robid   = RefLicencie.Robid (+)
  272. AND RefClasseEpreuve.Robid = RefEpreuve.ClasseEpreuve_Robid;


 
Avec des tables qui contiennent plusieurs centaines de milliers d'enregs.
 
Bon, faut juste avoir les bons index, et oracle s'occupe du reste.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 29-11-2002 à 11:10:01    

:ouch: heun non quand meme pas

Reply

Marsh Posté le 29-11-2002 à 12:03:05    

Mara's dad a écrit a écrit :

C'est une vue dans ce genre là ?




[:xp1700]

Reply

Marsh Posté le 29-11-2002 à 12:08:27    

:lol:  :lol:  :lol:  :lol:  
 
excellent!  [:t3xla]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 29-11-2002 à 12:08:57    

:ouch:


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 29-11-2002 à 13:30:25    

en cherchant un peu on doit en avoir des pareilles ici ;)

Reply

Marsh Posté le 29-11-2002 à 14:34:03    

J'ai découpé ma vu en petit bout, puis je les ai recoller et ca marche du tonner  :D  
 
Fait pas trop le malin toi, j'ai une procedure en PL/SQL trop grosse pour être posté sur ce forum  :o  :D

Reply

Marsh Posté le 29-11-2002 à 14:38:37    

j'ai pas de procédure stockée, le client aime pas :o
 
pis toute façon les vues c le prob du chef, pas le mien ;)

Reply

Sujets relatifs:

Leave a Replay

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