Page 1 sur 1

Importance de l'ordre des champs derrière un WHERE

Posté : 19 sept. 2012, 09:57
par zaggus
Bonjour à tous,
Je suis débutant dans le langage SQL et j'ai une petite question.
Y'a t'il une importance dans l'ordre des champs qui se trouve derrière mon WHERE ?
exemple :
cette requête me donne 200 résultats :

Code : Tout sélectionner

SELECT * FROM table1 WHERE champ1 = '09/19/2012'
cette requête me donne 1 000 000 de résultats :

Code : Tout sélectionner

SELECT * FROM table1 WHERE champ2 like 'C%'
du coup est-ce qu'une des deux requêtes suivantes devrait me sortir un résultat plus rapide ?

Code : Tout sélectionner

SELECT * FROM table1 WHERE champ1 = '09/19/2012' AND champ2 like 'C%'

Code : Tout sélectionner

SELECT * FROM table1 WHERE champ2 like 'C%' AND champ1 = '09/19/2012'
Je vous avouerai avoir essayé, mais le résultat semble le même et je ne sais pas si c'est dû à un résidu du traiement de ma requête ou au fait que l'ordre derrière le WHERE n'a pas d'importance.

Re: Importance de l'ordre des champs derrière un WHERE

Posté : 19 sept. 2012, 15:57
par moogli
salut,

sur le principe je dirais avec le plus restrictif en premier.

Après cela dépend aussi des index des colonnes qui peuvent accélérer certain select.

tu peux faire des test avec, php par exemple, en prenant le temps avant la requête et le temps après pour en faire le différence. Tu fait la même chose avec les deux requêtes.

tu peux aussi le faire en réalisant la requête plusieurs fois de suite pour voir s'il y a une différence et diviser par le nombre de requête pour faire une moyenne.

pas mal de client SQL t'indique aussi le temps d’exécution de la requête, tu peux commencer par cela ;)


@+

Re: Importance de l'ordre des champs derrière un WHERE

Posté : 20 sept. 2012, 07:51
par zaggus
Ok, je vais commencer par ça.
Merci pour la réponse.
Zag.

Re: Importance de l'ordre des champs derrière un WHERE

Posté : 20 sept. 2012, 10:51
par Mazarini
Les SBDG optimisent les requêtes, donc il est fort possible qu'ils traitent les conditions dans l'ordre le plus favorable. Dans le doute, il vaut mieux mettre la condition la plus sélective en premier comme indiqué par Moogli.

Pour tester les temps des requêtes, tu peux utiliser la fonction microtime(true) et afficher la différence entre avant et après la requête.