Optimisation : Un select et un autre select en fonction de la réponse du premie
Filipe35
Messages postés470Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention23 octobre 2007
-
28 sept. 2006 à 23:19
Filipe35
Messages postés470Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention23 octobre 2007
-
2 oct. 2006 à 17:52
Bonjour à tous
Je me heurte à un problème mineur d'optimisation de mes requètes :P
voici ma table:
nom | nb_lv | lv1 | lv2 | lv3 | lv4 | lv5 | lv6 |
Imaginons le cas suivant:
nom = Bob
nb_lv = 3
lv1 = 153segb
lv2 = 158gfag
lv3 = gfz51ge
lv4,5,6 = ''
actuellement je récupère à l'aide d'un select,nb_lv
ensuite je crée une requete en fonction de nb_lv que
je transmet à un select
ce qui me fait 2 requetes select pour une opération banale....
N'y a-t-il pas un moyen à l'aide de LIMIT et d'une autre fonction
de selectionner directement lv1,lv2,lv3 (soit les lvX remplis) et donc
de réduire le nombre de requetes à 1 ?
Filipe35
Messages postés470Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention23 octobre 20071 30 sept. 2006 à 12:25
Salut
effectivement après m'être relus, c'est très vague ce que j'ai écrit :S
Toujours le même exemple mais plus précis cette fois ^^
La table:
nom | nb_lv | lv1 | lv2 | lv3 | lv4 | lv5 | lv6 |
les valeurs:
nom = Bob
nb_lv = 3
lv1 = 153segb
lv2 = 158gfag
lv3 = gfz51ge
lv4=''
lv5=''
lv6=''
a. 1ère requête SELECT récupère nb_lv
b. Ensuite je crée une requête qui va récupérer les nb_lv premiers
levels
(dans notres cas les 3 premiers lv ( lv1, lv2 et lv3 ) vu que
nb_lv = 3 )
SELECT lv1 lv2 lv3
=> 2 requêtes pour une opération assez simple :S
voila j'espère que mon problème parait plus clair maintenant ;)
Filipe35
Messages postés470Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention23 octobre 20071 30 sept. 2006 à 17:51
Oui tu as répondu en partie à ma question, mais je souhaite quand même éviter au maximum les SELECT * (car dans ma vraie base je n'ai pas 6 lv mais beaucoup plus) ce qui ferrai une grande réponse de la part du server SQL et donc une réponse plus lente car plus de données à transmettre.
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201136 1 oct. 2006 à 14:25
Salut
Pour info un select * n'est pas recommandé.
Mais souvent c'est plus interressant que de faire deux resuter
EN plus le select * est a proscrire surtout dans le cas des
des champs de type texte.
Fais un select champ1,champ2,champ3
A la place
Mais pour info un select count(*) est plus optimisé
que un select count(A)
Les bonnes pratiques ne sont pas a suivre a la lettre
et de toute maniere, tu utilises une requete optimisé
et ton programme n'est pas optimisé.
C'est un peu du gachis, il faut un tout.
Et il faut savoir ou optimisé.
Il faut optimisé, les 20% du programme
ou 80% du temps est passé.
Pour ta structure
de table
Je te propose 2 tables
detail de la table score
=======================
niveau score id_joueur
1 34 A
2 56 A
3 123 A
1 45 B