Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme Optimisation code SQL ?

3 réponses
Avatar
News Groups
Bonjour,



Je sais que l'optimisation des requêtes dépend de multiples facteurs
(Index,Types donnés..), mais, au risque de me faire taper sur les doigts par
certains d'entre vous pour les syntaxes SQL qui vont suivrent, je voudrais
savoir quelle est la méthode de sélection la plus optimum parmi celles
présentées ci dessous :



Mes pré requis sont les suivants :

A partir d'une application, je veux retourner la valeurs de ColonneA,
ColonneB a partir d'une sélection sur deux colonnes (non clefs) ColonneC,
ColonneD avec plusieurs valeurs :

SELECT ColonneA, ColonneB

FROM MaTable

WHERE ((ColonneC = ValeurC1 AND ColonneD = ValeurD1) OR (ColonneC = ValeurC2
AND ColonneD = ValeurD2) OR ...)



Question 1

a.. Les Valeurs ValeurC1, ValeurC2.. étant dynamiques je ne peux utiliser
une vue car sinon je suis obliger de renvoyer tout les éléments et de
filtrer au niveau client : mauvais en terme de performances ! Non ?
b.. Les Valeurs étant multiples ValeurC1, ValeurC2.. l'utilisation d'une
Procédure stockée est impossible car elle n'accepte qu'une valeur par
paramètres ! Non. ?
c.. Donc j'opte pour une instruction SQL créée dynamiquement même si n'
étant pas compilée ce sera moins performant.
Question 2

Dans ce cas il me faut écrire la condition de restriction, j'aimerai savoir
laquelle parmi celles ci ,celle qui est la plus viable :

a.. WHERE ((ColonneC = ValeurC1 AND ColonneD = ValeurD1) OR (ColonneC =
ValeurC2 AND ColonneD = ValeurD2) OR ...)
b.. WHERE (ColonneC+ColonneD IN (ValeurC1+ValeurD1, ValeurC2+ValeurD2,..))


Merci de votre compréhension et de votre aide.

Thierry.

3 réponses

Avatar
News Groups
Après Analyse des plans d'exécutions, la métode a coute moins que la méthode
b, mais les temps de réponse sont similaires ?!

Je renvoie mon appel pour avoir une confirmation à mes questions..
Merci de votre aide,
Thierry.

"News Groups" a écrit dans le message de news:
41385dc0$0$20434$
Bonjour,



Je sais que l'optimisation des requêtes dépend de multiples facteurs
(Index,Types donnés..), mais, au risque de me faire taper sur les doigts


par
certains d'entre vous pour les syntaxes SQL qui vont suivrent, je voudrais
savoir quelle est la méthode de sélection la plus optimum parmi celles
présentées ci dessous :



Mes pré requis sont les suivants :

A partir d'une application, je veux retourner la valeurs de ColonneA,
ColonneB a partir d'une sélection sur deux colonnes (non clefs) ColonneC,
ColonneD avec plusieurs valeurs :

SELECT ColonneA, ColonneB

FROM MaTable

WHERE ((ColonneC = ValeurC1 AND ColonneD = ValeurD1) OR (ColonneC ValeurC2
AND ColonneD = ValeurD2) OR ...)



Question 1

a.. Les Valeurs ValeurC1, ValeurC2.. étant dynamiques je ne peux


utiliser
une vue car sinon je suis obliger de renvoyer tout les éléments et de
filtrer au niveau client : mauvais en terme de performances ! Non ?
b.. Les Valeurs étant multiples ValeurC1, ValeurC2.. l'utilisation d'une
Procédure stockée est impossible car elle n'accepte qu'une valeur par
paramètres ! Non. ?
c.. Donc j'opte pour une instruction SQL créée dynamiquement même si n'
étant pas compilée ce sera moins performant.
Question 2

Dans ce cas il me faut écrire la condition de restriction, j'aimerai


savoir
laquelle parmi celles ci ,celle qui est la plus viable :

a.. WHERE ((ColonneC = ValeurC1 AND ColonneD = ValeurD1) OR (ColonneC > ValeurC2 AND ColonneD = ValeurD2) OR ...)
b.. WHERE (ColonneC+ColonneD IN (ValeurC1+ValeurD1,


ValeurC2+ValeurD2,..))


Merci de votre compréhension et de votre aide.

Thierry.












Avatar
lionelp
Bonjour,

Peut-être qu'une colonne calculée C+D avec un index dessus
permet d'amméliorer les perfs
ensuite le requête devient:
select ...
from table
where colonne_calculée in (val1+val2, val3+val4, ...)
avec un index sur colonne_calculée.

un "set statistics profile on" permet de comparer l'estimé
avec le réalisé, ça peut être utile.

Cordialement,
LionelP

-----Message d'origine-----
Après Analyse des plans d'exécutions, la métode a coute


moins que la méthode
b, mais les temps de réponse sont similaires ?!

Je renvoie mon appel pour avoir une confirmation à mes


questions..
Merci de votre aide,
Thierry.

"News Groups" a écrit dans le


message de news:
41385dc0$0$20434$
Bonjour,



Je sais que l'optimisation des requêtes dépend de




multiples facteurs
(Index,Types donnés..), mais, au risque de me faire




taper sur les doigts
par
certains d'entre vous pour les syntaxes SQL qui vont




suivrent, je voudrais
savoir quelle est la méthode de sélection la plus




optimum parmi celles
présentées ci dessous :



Mes pré requis sont les suivants :

A partir d'une application, je veux retourner la




valeurs de ColonneA,
ColonneB a partir d'une sélection sur deux colonnes




(non clefs) ColonneC,
ColonneD avec plusieurs valeurs :

SELECT ColonneA, ColonneB

FROM MaTable

WHERE ((ColonneC = ValeurC1 AND ColonneD = ValeurD1) OR




(ColonneC =
ValeurC2
AND ColonneD = ValeurD2) OR ...)



Question 1

a.. Les Valeurs ValeurC1, ValeurC2.. étant dynamiques




je ne peux
utiliser
une vue car sinon je suis obliger de renvoyer tout les




éléments et de
filtrer au niveau client : mauvais en terme de




performances ! Non ?
b.. Les Valeurs étant multiples ValeurC1, ValeurC2..




l'utilisation d'une
Procédure stockée est impossible car elle n'accepte




qu'une valeur par
paramètres ! Non. ?
c.. Donc j'opte pour une instruction SQL créée




dynamiquement même si n'
étant pas compilée ce sera moins performant.
Question 2

Dans ce cas il me faut écrire la condition de




restriction, j'aimerai
savoir
laquelle parmi celles ci ,celle qui est la plus viable :

a.. WHERE ((ColonneC = ValeurC1 AND ColonneD =




ValeurD1) OR (ColonneC =
ValeurC2 AND ColonneD = ValeurD2) OR ...)
b.. WHERE (ColonneC+ColonneD IN (ValeurC1+ValeurD1,


ValeurC2+ValeurD2,..))


Merci de votre compréhension et de votre aide.

Thierry.














.



Avatar
News Groups
Merci de ton aide.
Thierry.
"lionelp" a écrit dans le message de
news: 09e901c491c5$0b7fb480$
Bonjour,

Peut-être qu'une colonne calculée C+D avec un index dessus
permet d'amméliorer les perfs
ensuite le requête devient:
select ...
from table
where colonne_calculée in (val1+val2, val3+val4, ...)
avec un index sur colonne_calculée.

un "set statistics profile on" permet de comparer l'estimé
avec le réalisé, ça peut être utile.

Cordialement,
LionelP

-----Message d'origine-----
Après Analyse des plans d'exécutions, la métode a coute


moins que la méthode
b, mais les temps de réponse sont similaires ?!

Je renvoie mon appel pour avoir une confirmation à mes


questions..
Merci de votre aide,
Thierry.

"News Groups" a écrit dans le


message de news:
41385dc0$0$20434$
Bonjour,



Je sais que l'optimisation des requêtes dépend de




multiples facteurs
(Index,Types donnés..), mais, au risque de me faire




taper sur les doigts
par
certains d'entre vous pour les syntaxes SQL qui vont




suivrent, je voudrais
savoir quelle est la méthode de sélection la plus




optimum parmi celles
présentées ci dessous :



Mes pré requis sont les suivants :

A partir d'une application, je veux retourner la




valeurs de ColonneA,
ColonneB a partir d'une sélection sur deux colonnes




(non clefs) ColonneC,
ColonneD avec plusieurs valeurs :

SELECT ColonneA, ColonneB

FROM MaTable

WHERE ((ColonneC = ValeurC1 AND ColonneD = ValeurD1) OR




(ColonneC >ValeurC2
AND ColonneD = ValeurD2) OR ...)



Question 1

a.. Les Valeurs ValeurC1, ValeurC2.. étant dynamiques




je ne peux
utiliser
une vue car sinon je suis obliger de renvoyer tout les




éléments et de
filtrer au niveau client : mauvais en terme de




performances ! Non ?
b.. Les Valeurs étant multiples ValeurC1, ValeurC2..




l'utilisation d'une
Procédure stockée est impossible car elle n'accepte




qu'une valeur par
paramètres ! Non. ?
c.. Donc j'opte pour une instruction SQL créée




dynamiquement même si n'
étant pas compilée ce sera moins performant.
Question 2

Dans ce cas il me faut écrire la condition de




restriction, j'aimerai
savoir
laquelle parmi celles ci ,celle qui est la plus viable :

a.. WHERE ((ColonneC = ValeurC1 AND ColonneD ValeurD1) OR (ColonneC >> ValeurC2 AND ColonneD = ValeurD2) OR ...)
b.. WHERE (ColonneC+ColonneD IN (ValeurC1+ValeurD1,


ValeurC2+ValeurD2,..))


Merci de votre compréhension et de votre aide.

Thierry.














.