Bonjour a tous j'ai cette requete qui presente un isnull()
celui me prend du temps un peu trop d'ailleurs mais je ne
vois pas comment le remplacer pouvez vous m'indiquez une
optimisation.
SELECT R.CREATION_DATE, R.CLE_REGLEMENTS,
R.CLE_SOCIETES_PARTICULIERS,
R.CLE_SOCIETES_PARTICULIERS_RF, R.MILLESIME,
R.ANNEE_FISCALE, R.DATE_RECEPTION_REGLEMENT,
R.MONTANT_EURO, R.BLOCAGE_RF, R.BLOCAGE_E_RF,
R.TYPE_REGLEMENT, R.ORIGINE_DON, R.BENEFICE_ou_DON,
R.CLE_REGLEMENTS_VENTILES, isnull(REF_ORIGINE_DON.RF,0) as
RF , SP.WAITING_ROOM , R.VERIF_BANQUE FROM REGLEMENTS R
WITH (nolock) left outer JOIN REF_ORIGINE_DON WITH
(nolock) ON R.ORIGINE_DON = REF_ORIGINE_DON.ORIGINE_DON
INNER JOIN SOCIETES_PARTICULIERS SP WITH (nolock) ON isnull
(R.CLE_SOCIETES_PARTICULIERS_RF,
R.CLE_SOCIETES_PARTICULIERS)=SP.CLE_SOCIETES_PARTICULIERS
WHERE SP.CLE_SOCIETES_PARTICULIERS = '20021205003493' AND
(isnull(R.CLE_REGLEMENTS_VENTILES,0)<>R.CLE_REGLEMENTS )
AND (R.MONTANT_EURO>0) ORDER BY R.ANNEE_FISCALE DESC,
R.CREATION_DATE DESC
LEFT OUTER JOIN REF_ORIGINE_DON ROD WITH (nolock) ON R.ORIGINE_DON = ROD.ORIGINE_DON
INNER JOIN SOCIETES_PARTICULIERS SP WITH (nolock) ON COALESCE (R.CLE_SOCIETES_PARTICULIERS_RF, R.CLE_SOCIETES_PARTICULIERS) SP.CLE_SOCIETES_PARTICULIERS
WHERE SP.CLE_SOCIETES_PARTICULIERS = '20021205003493' AND COALESCE(R.CLE_REGLEMENTS_VENTILES,0) <> R.CLE_REGLEMENTS AND R.MONTANT_EURO > 0
ORDER BY R.ANNEE_FISCALE DESC, R.CREATION_DATE DESC
A +
-- Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ****************** mailto: ******************
Troyan a écrit:
Bonjour a tous j'ai cette requete qui presente un isnull() celui me prend du temps un peu trop d'ailleurs mais je ne vois pas comment le remplacer pouvez vous m'indiquez une optimisation.
SELECT R.CREATION_DATE, R.CLE_REGLEMENTS, R.CLE_SOCIETES_PARTICULIERS, R.CLE_SOCIETES_PARTICULIERS_RF, R.MILLESIME, R.ANNEE_FISCALE, R.DATE_RECEPTION_REGLEMENT, R.MONTANT_EURO, R.BLOCAGE_RF, R.BLOCAGE_E_RF, R.TYPE_REGLEMENT, R.ORIGINE_DON, R.BENEFICE_ou_DON, R.CLE_REGLEMENTS_VENTILES, isnull(REF_ORIGINE_DON.RF,0) as RF , SP.WAITING_ROOM , R.VERIF_BANQUE FROM REGLEMENTS R WITH (nolock) left outer JOIN REF_ORIGINE_DON WITH (nolock) ON R.ORIGINE_DON = REF_ORIGINE_DON.ORIGINE_DON INNER JOIN SOCIETES_PARTICULIERS SP WITH (nolock) ON isnull (R.CLE_SOCIETES_PARTICULIERS_RF, R.CLE_SOCIETES_PARTICULIERS)=SP.CLE_SOCIETES_PARTICULIERS WHERE SP.CLE_SOCIETES_PARTICULIERS = '20021205003493' AND (isnull(R.CLE_REGLEMENTS_VENTILES,0)<>R.CLE_REGLEMENTS ) AND (R.MONTANT_EURO>0) ORDER BY R.ANNEE_FISCALE DESC, R.CREATION_DATE DESC
D'abord tu pourrait indenter ta requête pour la rendre lisible, ce
serait une marque de politesse
il n'y a pas grand chose à optimiser surtout si tu ne donne pas le
contexte d'éxécution, un jeu d'essai et le résultat attendu.
Par contre l'usage du NOLOCK peut conduire à de la lecture sale...
ce qui apporterait des données anormales .
Enfin, as tu impérativement besoin du tri ?
C'est là que le temps perdu est souvent le plus important !
A lire sur l'optimisation :
http://sqlpro.developpez.com/OptimSQL/SQL_optim.html
LEFT OUTER JOIN REF_ORIGINE_DON ROD WITH (nolock)
ON R.ORIGINE_DON = ROD.ORIGINE_DON
INNER JOIN SOCIETES_PARTICULIERS SP WITH (nolock)
ON COALESCE (R.CLE_SOCIETES_PARTICULIERS_RF,
R.CLE_SOCIETES_PARTICULIERS) SP.CLE_SOCIETES_PARTICULIERS
WHERE SP.CLE_SOCIETES_PARTICULIERS = '20021205003493'
AND COALESCE(R.CLE_REGLEMENTS_VENTILES,0) <> R.CLE_REGLEMENTS
AND R.MONTANT_EURO > 0
ORDER BY R.ANNEE_FISCALE DESC, R.CREATION_DATE DESC
A +
--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto:brouardf@club-internet.fr ******************
Troyan a écrit:
Bonjour a tous j'ai cette requete qui presente un isnull()
celui me prend du temps un peu trop d'ailleurs mais je ne
vois pas comment le remplacer pouvez vous m'indiquez une
optimisation.
SELECT R.CREATION_DATE, R.CLE_REGLEMENTS,
R.CLE_SOCIETES_PARTICULIERS,
R.CLE_SOCIETES_PARTICULIERS_RF, R.MILLESIME,
R.ANNEE_FISCALE, R.DATE_RECEPTION_REGLEMENT,
R.MONTANT_EURO, R.BLOCAGE_RF, R.BLOCAGE_E_RF,
R.TYPE_REGLEMENT, R.ORIGINE_DON, R.BENEFICE_ou_DON,
R.CLE_REGLEMENTS_VENTILES, isnull(REF_ORIGINE_DON.RF,0) as
RF , SP.WAITING_ROOM , R.VERIF_BANQUE FROM REGLEMENTS R
WITH (nolock) left outer JOIN REF_ORIGINE_DON WITH
(nolock) ON R.ORIGINE_DON = REF_ORIGINE_DON.ORIGINE_DON
INNER JOIN SOCIETES_PARTICULIERS SP WITH (nolock) ON isnull
(R.CLE_SOCIETES_PARTICULIERS_RF,
R.CLE_SOCIETES_PARTICULIERS)=SP.CLE_SOCIETES_PARTICULIERS
WHERE SP.CLE_SOCIETES_PARTICULIERS = '20021205003493' AND
(isnull(R.CLE_REGLEMENTS_VENTILES,0)<>R.CLE_REGLEMENTS )
AND (R.MONTANT_EURO>0) ORDER BY R.ANNEE_FISCALE DESC,
R.CREATION_DATE DESC
LEFT OUTER JOIN REF_ORIGINE_DON ROD WITH (nolock) ON R.ORIGINE_DON = ROD.ORIGINE_DON
INNER JOIN SOCIETES_PARTICULIERS SP WITH (nolock) ON COALESCE (R.CLE_SOCIETES_PARTICULIERS_RF, R.CLE_SOCIETES_PARTICULIERS) SP.CLE_SOCIETES_PARTICULIERS
WHERE SP.CLE_SOCIETES_PARTICULIERS = '20021205003493' AND COALESCE(R.CLE_REGLEMENTS_VENTILES,0) <> R.CLE_REGLEMENTS AND R.MONTANT_EURO > 0
ORDER BY R.ANNEE_FISCALE DESC, R.CREATION_DATE DESC
A +
-- Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ****************** mailto: ******************
Troyan a écrit:
Bonjour a tous j'ai cette requete qui presente un isnull() celui me prend du temps un peu trop d'ailleurs mais je ne vois pas comment le remplacer pouvez vous m'indiquez une optimisation.
SELECT R.CREATION_DATE, R.CLE_REGLEMENTS, R.CLE_SOCIETES_PARTICULIERS, R.CLE_SOCIETES_PARTICULIERS_RF, R.MILLESIME, R.ANNEE_FISCALE, R.DATE_RECEPTION_REGLEMENT, R.MONTANT_EURO, R.BLOCAGE_RF, R.BLOCAGE_E_RF, R.TYPE_REGLEMENT, R.ORIGINE_DON, R.BENEFICE_ou_DON, R.CLE_REGLEMENTS_VENTILES, isnull(REF_ORIGINE_DON.RF,0) as RF , SP.WAITING_ROOM , R.VERIF_BANQUE FROM REGLEMENTS R WITH (nolock) left outer JOIN REF_ORIGINE_DON WITH (nolock) ON R.ORIGINE_DON = REF_ORIGINE_DON.ORIGINE_DON INNER JOIN SOCIETES_PARTICULIERS SP WITH (nolock) ON isnull (R.CLE_SOCIETES_PARTICULIERS_RF, R.CLE_SOCIETES_PARTICULIERS)=SP.CLE_SOCIETES_PARTICULIERS WHERE SP.CLE_SOCIETES_PARTICULIERS = '20021205003493' AND (isnull(R.CLE_REGLEMENTS_VENTILES,0)<>R.CLE_REGLEMENTS ) AND (R.MONTANT_EURO>0) ORDER BY R.ANNEE_FISCALE DESC, R.CREATION_DATE DESC
troyan
Excuse pour la mise en page, mais c'ete ce matin a 6h j'ai passé la nuit au taf...sorry.
pour le nolock tu as raison mais bon j'ai pas tous les pouvoirs, de decisions.
ma question est simplment basé sur la vitesse si j'enleve le isnull() c'est presque du instantané, donc comme je ne peux m'en passer. je voulais juste savoir si il y'avais un moyen de le contourner avec une autre methode ??
voila donc je suis toujours preneurs, le tri n'influence pas cartres peu d'enregistrement sont en retour,
genre 5 ou 6 par contre sur des table de 6 millions...
@+ et merci
-----Message d'origine----- D'abord tu pourrait indenter ta requête pour la rendre
lisible, ce
serait une marque de politesse
il n'y a pas grand chose à optimiser surtout si tu ne
donne pas le
contexte d'éxécution, un jeu d'essai et le résultat
attendu.
Par contre l'usage du NOLOCK peut conduire à de la
lecture sale...
ce qui apporterait des données anormales .
Enfin, as tu impérativement besoin du tri ? C'est là que le temps perdu est souvent le plus
important !
A lire sur l'optimisation : http://sqlpro.developpez.com/OptimSQL/SQL_optim.html
RF , SP.WAITING_ROOM , R.VERIF_BANQUE FROM REGLEMENTS R WITH (nolock) left outer JOIN REF_ORIGINE_DON WITH (nolock) ON R.ORIGINE_DON = REF_ORIGINE_DON.ORIGINE_DON INNER JOIN SOCIETES_PARTICULIERS SP WITH (nolock) ON
WHERE SP.CLE_SOCIETES_PARTICULIERS = '20021205003493'
AND
(isnull(R.CLE_REGLEMENTS_VENTILES,0)
<>R.CLE_REGLEMENTS )
AND (R.MONTANT_EURO>0) ORDER BY R.ANNEE_FISCALE DESC, R.CREATION_DATE DESC
.
Excuse pour la mise en page,
mais c'ete ce matin a 6h j'ai passé la nuit au taf...sorry.
pour le nolock tu as raison mais bon j'ai pas tous les
pouvoirs, de decisions.
ma question est simplment basé sur la vitesse si j'enleve
le isnull() c'est presque du instantané, donc comme je ne
peux m'en passer.
je voulais juste savoir si il y'avais un moyen de le
contourner avec une autre methode ??
voila donc je suis toujours preneurs, le tri n'influence
pas cartres peu d'enregistrement sont en retour,
genre 5 ou 6 par contre sur des table de 6 millions...
@+ et merci
-----Message d'origine-----
D'abord tu pourrait indenter ta requête pour la rendre
lisible, ce
serait une marque de politesse
il n'y a pas grand chose à optimiser surtout si tu ne
donne pas le
contexte d'éxécution, un jeu d'essai et le résultat
attendu.
Par contre l'usage du NOLOCK peut conduire à de la
lecture sale...
ce qui apporterait des données anormales .
Enfin, as tu impérativement besoin du tri ?
C'est là que le temps perdu est souvent le plus
important !
A lire sur l'optimisation :
http://sqlpro.developpez.com/OptimSQL/SQL_optim.html
RF , SP.WAITING_ROOM , R.VERIF_BANQUE FROM REGLEMENTS R
WITH (nolock) left outer JOIN REF_ORIGINE_DON WITH
(nolock) ON R.ORIGINE_DON = REF_ORIGINE_DON.ORIGINE_DON
INNER JOIN SOCIETES_PARTICULIERS SP WITH (nolock) ON
Excuse pour la mise en page, mais c'ete ce matin a 6h j'ai passé la nuit au taf...sorry.
pour le nolock tu as raison mais bon j'ai pas tous les pouvoirs, de decisions.
ma question est simplment basé sur la vitesse si j'enleve le isnull() c'est presque du instantané, donc comme je ne peux m'en passer. je voulais juste savoir si il y'avais un moyen de le contourner avec une autre methode ??
voila donc je suis toujours preneurs, le tri n'influence pas cartres peu d'enregistrement sont en retour,
genre 5 ou 6 par contre sur des table de 6 millions...
@+ et merci
-----Message d'origine----- D'abord tu pourrait indenter ta requête pour la rendre
lisible, ce
serait une marque de politesse
il n'y a pas grand chose à optimiser surtout si tu ne
donne pas le
contexte d'éxécution, un jeu d'essai et le résultat
attendu.
Par contre l'usage du NOLOCK peut conduire à de la
lecture sale...
ce qui apporterait des données anormales .
Enfin, as tu impérativement besoin du tri ? C'est là que le temps perdu est souvent le plus
important !
A lire sur l'optimisation : http://sqlpro.developpez.com/OptimSQL/SQL_optim.html
RF , SP.WAITING_ROOM , R.VERIF_BANQUE FROM REGLEMENTS R WITH (nolock) left outer JOIN REF_ORIGINE_DON WITH (nolock) ON R.ORIGINE_DON = REF_ORIGINE_DON.ORIGINE_DON INNER JOIN SOCIETES_PARTICULIERS SP WITH (nolock) ON