|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 17 ![]() |
Bonjour;
Je travaille actuellement sur une base de donnés assez importante 3 tables chacune d 'entre elle contient au minimum 40000 enregistrement: Voici sa structure: [IMG] http://www.imgplace.com/viewimg810/584/37sansre.png [/IMG] Ma requete : Code :
Mon probléme est que cette requete met un temps important a m'afficher le resultat Merci pour votre aide |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Olivier Développeur Web Inscription : août 2003 Messages : 1 837 ![]() |
Je vois aucune relation entre tes tables sur ton schema c'est normal ?
Ce qui induit la question suivante : As tu correctement indéxé les champs qui doivent l'être notamment les clés étrangère ? -- edit -- C'est quoi le but de cette horreur ^^ : Code :
users.UserID IN (select last_insert_id(UserID) from users) |
|
00
|
|
|
#3 | |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 17 ![]() |
Citation:
Code :
users.UserID IN (select last_insert_id(UserID) from users) Oui mes champs sont indexés, j'ai testé ma requete sur 30 enregistrements et elle fonctionne parfaitement, à 5000 enregistrements sa plante. |
|
|
|
00
|
|
|
#4 |
![]() ![]() |
Bonjour,
c'est en effet une requête complexe, avec join et sous-requetes. Peut-être aurais-tu intérêt à commencer par : 1/ envoyer "un éclaireur" pour trouver l'id : -> executer : "select last_insert_id(UserID) AS Id_last from users;" => $Id_last = $result['Id_last']; 2/ envoyer "l'infanterie" pour vérifier si le telephone est bien dans la table : -> executer : "select telephone FROM telephone where telephone like '%$search%'" => $tel_search = $result['telephone']; 3/ ne lancer "la grosse artillerie" QUE si on trouve un résultat pour $Id_last et $tel_search. la fin de la requête étant : Code :
WHERE users.UserID = '".$Id_last."' AND telephone.telephone = '".$tel_search."' ORDER BY users.USERID DESC LIMIT 1 ; Quant à la 3ème ... elle saura tout de suite où chercher.
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément." Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique. Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
|
|
|
10
|
|
|
#5 | ||
|
Expert Confirmé
![]() Olivier Développeur Web Inscription : août 2003 Messages : 1 837 ![]() |
Citation:
Code :
users.UserID IN (select last_insert_id(UserID) from users) Citation:
La sous requete du téléphone ne me semble pas contournable. Comme le dit jreaux62 , il peut être très avantageux de découper les traitements. Note au passage que 40k ligne dans une table c'est vraiment pas grand chose , donc y'a effectivement un problème quelque part |
||
|
00
|
|
|
#6 | |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 17 ![]() |
Citation:
une derniere question , c est faisable avec une recherche instantané? l'utilisateur pourra simplement tapper le numero de telephone et lui afficher le resultat? si je ne procéde pas ainsi changer de serveur plus performant resoudra t il mon probleme? Merci |
|
|
|
00
|
|
|
#7 |
![]() ![]() |
Si c'est un utilisateur enregistré, il doit avoir un UserID.
Que tu peux enregistrer dans une session (par exemple) Ensuite : Code :
... WHERE users.UserID = '".$_SESSION['UserID']."' ... -> executer juste : Code :
"select telephone FROM telephone where telephone like '%$search%'"
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément." Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique. Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
|
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 17 ![]() |
J'ai modifié la requete en ajoutant les alias,en effectuant des index sur la base et en changeant de serveur aussi
Merci |
|
|
00
|
|
|
#9 | |
![]() ![]() |
Bonjour,
petite question : à quoi sert la recherche sur le "telephone" ? est-elle utile ? plus précisément : pourquoi faire la recherche d'équivalence dans la BdD alors qu'on peut faire la vérification après, en php. bon, je me rends compte que ce n'est pas plus clair ... Citation:
... AND telephone.telephone = '%".$tel_search."%' ...
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément." Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique. Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
|
|
|
|
00
|
|
|
#10 | |
|
Expert Confirmé
![]() Olivier Développeur Web Inscription : août 2003 Messages : 1 837 ![]() |
Citation:
On peut également en placer sur les champs qui vont être beaucoup utiliser dans les clauses WHERE. Attention tout de même, trop d'index peut tuer l'index |
|
|
10
|
|
|
#11 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 17 ![]() |
Code :
WHERE users.UserID IN (select last_insert_id(UserID) from users) AND telephone.telephone IN (select telephone FROM telephone where telephone like '%$search%') ORDER BY users.USERID DESC LIMIT 1 ; ORDER BY users.USERID DESC LIMIT 1 ;=> recherche le dernier users inscrit suivant l'id 2 conditions qui aboutissent au meme resultat donc double travail , j'ai juste supprimer "users.UserID IN (select last_insert_id(UserID) from users)" |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com