Requete trop longue!
Résolu/Fermé
xav3601
Messages postés
3288
Date d'inscription
lundi 10 novembre 2008
Statut
Membre
Dernière intervention
2 mars 2016
-
15 févr. 2010 à 14:29
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 - 18 févr. 2010 à 09:12
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 - 18 févr. 2010 à 09:12
10 réponses
PRO_PHP
Messages postés
95
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
27 avril 2010
1
15 févr. 2010 à 18:36
15 févr. 2010 à 18:36
vue que je ne vois pas ta reque c'est difficile a savoir mais moi j'opterai pour une procédure stocké!!
C'est plus rapide et ta moin de chance que ca plante...
C'est plus rapide et ta moin de chance que ca plante...
xav3601
Messages postés
3288
Date d'inscription
lundi 10 novembre 2008
Statut
Membre
Dernière intervention
2 mars 2016
311
16 févr. 2010 à 08:59
16 févr. 2010 à 08:59
La requete la voilà, elle est pas très bien formatté désolé ^^
select
CODEFILS, CODEEXTERNEFILS, CODEPERE, CODE_GP, CODE_DPT, CODEEXTERNEPERE, MONTANT, LIBELLE
from (
select
ROWNUM as RNUM, CODEFILS, CODEEXTERNEFILS, CODEPERE, CODE_GP, CODE_DPT, CODEEXTERNEPERE, MONTANT, LIBELLE
from (
SELECT NULL AS codefils, NULL AS codeexternefils,
nmc_ue_cdnmccmr AS codepere, nmc_gp_cdnmccmr AS code_gp,
nmc_dpt_cdnmccmr AS code_dpt, nmc_ue_cdextnmccmr AS codeexternepere,
SUM (DECODE (orvalmnt, 'C', vlmntmvt, -vlmntmvt)) AS montant,
nmc_ue_lbnmccmr AS libelle
FROM (SELECT nmc_dpt.cdresdis nmc_dpt_cdresdis,
nmc_fam.cdnmccmr nmc_fam_cdnmccmr,
nmc_ue.cdstrnmccmr nmc_ue_cdstrnmccmr,
nmc_ue.cdextnmccmr nmc_ue_cdextnmccmr,
nmc_gp.cdextnmccmr nmc_gp_cdextnmccmr,
nmc_dpt.cdextnmccmr nmc_dpt_cdextnmccmr,
nmc_gp.cdnmccmr nmc_gp_cdnmccmr,
nmc_dpt.cdnmccmr nmc_dpt_cdnmccmr,
nmc_ue.lbnmccmr nmc_ue_lbnmccmr,
nmc_ue.cdnmccmr nmc_ue_cdnmccmr
FROM rgxtnmc nmc_mag INNER JOIN rgxthnm hnm_mag_dpt ON hnm_mag_dpt.cdnmccmrfll =
nmc_mag.cdnmccmr
AND ( ( hnm_mag_dpt.dtfinlienmc IS NOT NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
BETWEEN hnm_mag_dpt.dtdeblienmc
AND hnm_mag_dpt.dtfinlienmc
)
OR ( hnm_mag_dpt.dtfinlienmc IS NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
) >=
hnm_mag_dpt.dtdeblienmc
)
)
INNER JOIN rgxtnmc nmc_dpt ON nmc_dpt.cdnmccmr =
hnm_mag_dpt.cdnmccmr
AND nmc_dpt.cdresdis = 8
AND ( ( nmc_dpt.dtfinacvnmc IS NULL
OR (nmc_dpt.dtfinacvnmc >=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
AND (nmc_dpt.dtdebacvnmc <=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
INNER JOIN rgxthnm hnm_dpt_gp ON hnm_dpt_gp.cdnmccmrfll =
nmc_dpt.cdnmccmr
AND ( ( hnm_dpt_gp.dtfinlienmc IS NOT NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
BETWEEN hnm_dpt_gp.dtdeblienmc
AND hnm_dpt_gp.dtfinlienmc
)
OR ( hnm_dpt_gp.dtfinlienmc IS NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
) >=
hnm_dpt_gp.dtdeblienmc
)
)
INNER JOIN rgxtnmc nmc_gp ON nmc_gp.cdnmccmr =
hnm_dpt_gp.cdnmccmr
AND ( ( nmc_gp.dtfinacvnmc IS NULL
OR (nmc_gp.dtfinacvnmc >=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
AND (nmc_gp.dtdebacvnmc <=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
INNER JOIN rgxthnm hnm_gp_ue ON hnm_gp_ue.cdnmccmrfll =
nmc_gp.cdnmccmr
AND ( ( hnm_gp_ue.dtfinlienmc IS NOT NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
BETWEEN hnm_gp_ue.dtdeblienmc
AND hnm_gp_ue.dtfinlienmc
)
OR ( hnm_gp_ue.dtfinlienmc IS NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
) >=
hnm_gp_ue.dtdeblienmc
)
)
INNER JOIN rgxtnmc nmc_ue ON nmc_ue.cdnmccmr =
hnm_gp_ue.cdnmccmr
AND nmc_ue.cdstrnmccmr = 2
AND ( ( nmc_ue.dtfinacvnmc IS NULL
OR (nmc_ue.dtfinacvnmc >=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
AND (nmc_ue.dtdebacvnmc <=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
INNER JOIN rgxthnm hnm_ue_fam ON hnm_ue_fam.cdnmccmrfll =
nmc_ue.cdnmccmr
AND ( ( hnm_ue_fam.dtfinlienmc IS NOT NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
BETWEEN hnm_ue_fam.dtdeblienmc
AND hnm_ue_fam.dtfinlienmc
)
OR ( hnm_ue_fam.dtfinlienmc IS NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
) >=
hnm_ue_fam.dtdeblienmc
)
)
INNER JOIN rgxtnmc nmc_fam ON nmc_fam.cdnmccmr =
hnm_ue_fam.cdnmccmr
AND ( ( nmc_fam.dtfinacvnmc IS NULL
OR (nmc_fam.dtfinacvnmc >=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
AND (nmc_fam.dtdebacvnmc <=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
) STRUCTURE,
(SELECT *
FROM rgxtmvc mvc
WHERE mvc.cdmagdis = 4264
AND mvc.dtjurcpt = TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy')
AND mvc.cdtypmvt IN (100,102,110,111)) mvc
--,rgxtetn etn
WHERE STRUCTURE.nmc_fam_cdnmccmr = mvc.cdnmccmr(+)
AND NOT EXISTS (
SELECT *
FROM rgxtetn etn
WHERE ( ( etn.dtfinlieeat IS NOT NULL
AND TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy')
BETWEEN etn.dtdebeatnmc
AND etn.dtfinlieeat
)
OR ( etn.dtfinlieeat IS NULL
AND TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy') >=
etn.dtdebeatnmc
)
)
AND etn.cdeatobjrgx IN (10,12)
AND ( etn.cdnmccmr = STRUCTURE.nmc_dpt_cdnmccmr
OR etn.cdnmccmr = STRUCTURE.nmc_gp_cdnmccmr
OR etn.cdnmccmr = STRUCTURE.nmc_ue_cdnmccmr
))
GROUP BY nmc_ue_cdnmccmr,
nmc_ue_cdextnmccmr,
nmc_ue_lbnmccmr,
nmc_dpt_cdnmccmr,
nmc_dpt_cdextnmccmr,
nmc_gp_cdnmccmr,
nmc_gp_cdextnmccmr
ORDER BY nmc_ue_cdextnmccmr ASC
) where ROWNUM <= 8 )
where RNUM > 0;
select
CODEFILS, CODEEXTERNEFILS, CODEPERE, CODE_GP, CODE_DPT, CODEEXTERNEPERE, MONTANT, LIBELLE
from (
select
ROWNUM as RNUM, CODEFILS, CODEEXTERNEFILS, CODEPERE, CODE_GP, CODE_DPT, CODEEXTERNEPERE, MONTANT, LIBELLE
from (
SELECT NULL AS codefils, NULL AS codeexternefils,
nmc_ue_cdnmccmr AS codepere, nmc_gp_cdnmccmr AS code_gp,
nmc_dpt_cdnmccmr AS code_dpt, nmc_ue_cdextnmccmr AS codeexternepere,
SUM (DECODE (orvalmnt, 'C', vlmntmvt, -vlmntmvt)) AS montant,
nmc_ue_lbnmccmr AS libelle
FROM (SELECT nmc_dpt.cdresdis nmc_dpt_cdresdis,
nmc_fam.cdnmccmr nmc_fam_cdnmccmr,
nmc_ue.cdstrnmccmr nmc_ue_cdstrnmccmr,
nmc_ue.cdextnmccmr nmc_ue_cdextnmccmr,
nmc_gp.cdextnmccmr nmc_gp_cdextnmccmr,
nmc_dpt.cdextnmccmr nmc_dpt_cdextnmccmr,
nmc_gp.cdnmccmr nmc_gp_cdnmccmr,
nmc_dpt.cdnmccmr nmc_dpt_cdnmccmr,
nmc_ue.lbnmccmr nmc_ue_lbnmccmr,
nmc_ue.cdnmccmr nmc_ue_cdnmccmr
FROM rgxtnmc nmc_mag INNER JOIN rgxthnm hnm_mag_dpt ON hnm_mag_dpt.cdnmccmrfll =
nmc_mag.cdnmccmr
AND ( ( hnm_mag_dpt.dtfinlienmc IS NOT NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
BETWEEN hnm_mag_dpt.dtdeblienmc
AND hnm_mag_dpt.dtfinlienmc
)
OR ( hnm_mag_dpt.dtfinlienmc IS NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
) >=
hnm_mag_dpt.dtdeblienmc
)
)
INNER JOIN rgxtnmc nmc_dpt ON nmc_dpt.cdnmccmr =
hnm_mag_dpt.cdnmccmr
AND nmc_dpt.cdresdis = 8
AND ( ( nmc_dpt.dtfinacvnmc IS NULL
OR (nmc_dpt.dtfinacvnmc >=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
AND (nmc_dpt.dtdebacvnmc <=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
INNER JOIN rgxthnm hnm_dpt_gp ON hnm_dpt_gp.cdnmccmrfll =
nmc_dpt.cdnmccmr
AND ( ( hnm_dpt_gp.dtfinlienmc IS NOT NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
BETWEEN hnm_dpt_gp.dtdeblienmc
AND hnm_dpt_gp.dtfinlienmc
)
OR ( hnm_dpt_gp.dtfinlienmc IS NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
) >=
hnm_dpt_gp.dtdeblienmc
)
)
INNER JOIN rgxtnmc nmc_gp ON nmc_gp.cdnmccmr =
hnm_dpt_gp.cdnmccmr
AND ( ( nmc_gp.dtfinacvnmc IS NULL
OR (nmc_gp.dtfinacvnmc >=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
AND (nmc_gp.dtdebacvnmc <=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
INNER JOIN rgxthnm hnm_gp_ue ON hnm_gp_ue.cdnmccmrfll =
nmc_gp.cdnmccmr
AND ( ( hnm_gp_ue.dtfinlienmc IS NOT NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
BETWEEN hnm_gp_ue.dtdeblienmc
AND hnm_gp_ue.dtfinlienmc
)
OR ( hnm_gp_ue.dtfinlienmc IS NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
) >=
hnm_gp_ue.dtdeblienmc
)
)
INNER JOIN rgxtnmc nmc_ue ON nmc_ue.cdnmccmr =
hnm_gp_ue.cdnmccmr
AND nmc_ue.cdstrnmccmr = 2
AND ( ( nmc_ue.dtfinacvnmc IS NULL
OR (nmc_ue.dtfinacvnmc >=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
AND (nmc_ue.dtdebacvnmc <=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
INNER JOIN rgxthnm hnm_ue_fam ON hnm_ue_fam.cdnmccmrfll =
nmc_ue.cdnmccmr
AND ( ( hnm_ue_fam.dtfinlienmc IS NOT NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
BETWEEN hnm_ue_fam.dtdeblienmc
AND hnm_ue_fam.dtfinlienmc
)
OR ( hnm_ue_fam.dtfinlienmc IS NULL
AND TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
) >=
hnm_ue_fam.dtdeblienmc
)
)
INNER JOIN rgxtnmc nmc_fam ON nmc_fam.cdnmccmr =
hnm_ue_fam.cdnmccmr
AND ( ( nmc_fam.dtfinacvnmc IS NULL
OR (nmc_fam.dtfinacvnmc >=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
AND (nmc_fam.dtdebacvnmc <=
TO_TIMESTAMP
('08/01/2010',
'dd/MM/yyyy'
)
)
)
) STRUCTURE,
(SELECT *
FROM rgxtmvc mvc
WHERE mvc.cdmagdis = 4264
AND mvc.dtjurcpt = TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy')
AND mvc.cdtypmvt IN (100,102,110,111)) mvc
--,rgxtetn etn
WHERE STRUCTURE.nmc_fam_cdnmccmr = mvc.cdnmccmr(+)
AND NOT EXISTS (
SELECT *
FROM rgxtetn etn
WHERE ( ( etn.dtfinlieeat IS NOT NULL
AND TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy')
BETWEEN etn.dtdebeatnmc
AND etn.dtfinlieeat
)
OR ( etn.dtfinlieeat IS NULL
AND TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy') >=
etn.dtdebeatnmc
)
)
AND etn.cdeatobjrgx IN (10,12)
AND ( etn.cdnmccmr = STRUCTURE.nmc_dpt_cdnmccmr
OR etn.cdnmccmr = STRUCTURE.nmc_gp_cdnmccmr
OR etn.cdnmccmr = STRUCTURE.nmc_ue_cdnmccmr
))
GROUP BY nmc_ue_cdnmccmr,
nmc_ue_cdextnmccmr,
nmc_ue_lbnmccmr,
nmc_dpt_cdnmccmr,
nmc_dpt_cdextnmccmr,
nmc_gp_cdnmccmr,
nmc_gp_cdextnmccmr
ORDER BY nmc_ue_cdextnmccmr ASC
) where ROWNUM <= 8 )
where RNUM > 0;
blux
Messages postés
25976
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 avril 2024
3 287
16 févr. 2010 à 12:28
16 févr. 2010 à 12:28
Salut,
c'est sur quel SGBD ?
Je vois beaucoup de select * dans les sous-requêtes, as-tu besoin de tous les champs ?
c'est sur quel SGBD ?
Je vois beaucoup de select * dans les sous-requêtes, as-tu besoin de tous les champs ?
xav3601
Messages postés
3288
Date d'inscription
lundi 10 novembre 2008
Statut
Membre
Dernière intervention
2 mars 2016
311
16 févr. 2010 à 13:12
16 févr. 2010 à 13:12
C'est sous oracle!
Et pour les select * c'est en effet cet partie la de la requete qui prend beaucoup de temps...
Etant donné que c'est pas moi qui l'ai faite en entier, je galère un peu a voir ce qui est utile ou pas...
Mais je continue d'essayer d'approfondir!
Et pour les select * c'est en effet cet partie la de la requete qui prend beaucoup de temps...
Etant donné que c'est pas moi qui l'ai faite en entier, je galère un peu a voir ce qui est utile ou pas...
Mais je continue d'essayer d'approfondir!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
blux
Messages postés
25976
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 avril 2024
3 287
16 févr. 2010 à 13:13
16 févr. 2010 à 13:13
Que dit un EXPLAIN ?
xav3601
Messages postés
3288
Date d'inscription
lundi 10 novembre 2008
Statut
Membre
Dernière intervention
2 mars 2016
311
16 févr. 2010 à 13:39
16 févr. 2010 à 13:39
J'arrive pas à faire un explain avec SQL Developer, je fais ca:
EXPLAIN PLAN FOR
Ma requete
Et ca me sors une erreur...
EXPLAIN PLAN FOR
Ma requete
Et ca me sors une erreur...
blux
Messages postés
25976
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 avril 2024
3 287
16 févr. 2010 à 13:46
16 févr. 2010 à 13:46
essaie de faire requête après requête...
xav3601
Messages postés
3288
Date d'inscription
lundi 10 novembre 2008
Statut
Membre
Dernière intervention
2 mars 2016
311
16 févr. 2010 à 13:50
16 févr. 2010 à 13:50
Visiblement le explain plante car il veut ecrire dans une table qui n'est pas assez grande ^^
Mais sinon la partie qui prend du temps je l'ai trouvé c'est ca:
SELECT *
FROM rgxtmvc mvc
WHERE mvc.cdmagdis = 4264
AND mvc.dtjurcpt = TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy')
AND mvc.cdtypmvt IN (100,102,110,111)) mvc
--,rgxtetn etn
WHERE STRUCTURE.nmc_fam_cdnmccmr = mvc.cdnmccmr(+)
AND NOT EXISTS (
SELECT *
FROM rgxtetn etn
WHERE ( ( etn.dtfinlieeat IS NOT NULL
AND TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy')
BETWEEN etn.dtdebeatnmc
AND etn.dtfinlieeat
)
OR ( etn.dtfinlieeat IS NULL
AND TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy') >=
etn.dtdebeatnmc
)
)
AND etn.cdeatobjrgx IN (10,12)
AND ( etn.cdnmccmr = STRUCTURE.nmc_dpt_cdnmccmr
OR etn.cdnmccmr = STRUCTURE.nmc_gp_cdnmccmr
OR etn.cdnmccmr = STRUCTURE.nmc_ue_cdnmccmr
))
Qui permet de récupérer les champs nécessaire pour faire se calcul:
SUM (DECODE (orvalmnt, 'C', vlmntmvt, -vlmntmvt)) AS montant
Alors je vais essayer d'extraire cette partie de la requete et de la traiter séparement...
J'adore les grandes requêtes SQL comme ca xD
Mais sinon la partie qui prend du temps je l'ai trouvé c'est ca:
SELECT *
FROM rgxtmvc mvc
WHERE mvc.cdmagdis = 4264
AND mvc.dtjurcpt = TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy')
AND mvc.cdtypmvt IN (100,102,110,111)) mvc
--,rgxtetn etn
WHERE STRUCTURE.nmc_fam_cdnmccmr = mvc.cdnmccmr(+)
AND NOT EXISTS (
SELECT *
FROM rgxtetn etn
WHERE ( ( etn.dtfinlieeat IS NOT NULL
AND TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy')
BETWEEN etn.dtdebeatnmc
AND etn.dtfinlieeat
)
OR ( etn.dtfinlieeat IS NULL
AND TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy') >=
etn.dtdebeatnmc
)
)
AND etn.cdeatobjrgx IN (10,12)
AND ( etn.cdnmccmr = STRUCTURE.nmc_dpt_cdnmccmr
OR etn.cdnmccmr = STRUCTURE.nmc_gp_cdnmccmr
OR etn.cdnmccmr = STRUCTURE.nmc_ue_cdnmccmr
))
Qui permet de récupérer les champs nécessaire pour faire se calcul:
SUM (DECODE (orvalmnt, 'C', vlmntmvt, -vlmntmvt)) AS montant
Alors je vais essayer d'extraire cette partie de la requete et de la traiter séparement...
J'adore les grandes requêtes SQL comme ca xD
PRO_PHP
Messages postés
95
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
27 avril 2010
1
16 févr. 2010 à 14:15
16 févr. 2010 à 14:15
au lieu de faire plein de select tu devrai faire des INNER JOIN c'est plus rapide :)
xav3601
Messages postés
3288
Date d'inscription
lundi 10 novembre 2008
Statut
Membre
Dernière intervention
2 mars 2016
311
17 févr. 2010 à 10:09
17 févr. 2010 à 10:09
Je peux pas faire des inner join...
enfin pas plus que ce qu'il y'a deja!
Le probleme viens du fait que les données sont trop nombreuses et trop enfouilli ^^
enfin pas plus que ce qu'il y'a deja!
Le probleme viens du fait que les données sont trop nombreuses et trop enfouilli ^^
xav3601
Messages postés
3288
Date d'inscription
lundi 10 novembre 2008
Statut
Membre
Dernière intervention
2 mars 2016
311
18 févr. 2010 à 09:12
18 févr. 2010 à 09:12
La creation d'un index bien choisit (ce qui n'était pas le cas avant^^) règle le problème^^
Merci à vous!
Merci à vous!