Optimisation requête

Eléphant du PHP | 160 Messages

16 avr. 2006, 02:52

Bonjour,
Je viens de résoudre un problème de jointure.
J'ai fait cette requête avec WHERE et ça marche:
$query = "SELECT * FROM panier,evenements WHERE panier.ref=evenements.ref AND pseudo= '".$_SESSION['pseudo']."'";
N'y a t'il pas mieux, par exemple avec un LEFT JOIN?
Merci

Eléphant du PHP | 254 Messages

16 avr. 2006, 03:26

si tu parles d'optimisation au niveau du temps de traitement, la reponse est non pour le LEFT JOIN.

par contre mettre des index/unique/primaire sur les colonnes utilisés dans la clause WHERE, ca oui !

Eléphant du PHP | 160 Messages

16 avr. 2006, 03:58

Merci pour l'info, mais si tu peux préciser un peu car je n'ai pas bien compris.
Est-ce quelquechose que je dois faire au moment de la création des tables?
++

Eléphant du PHP | 254 Messages

16 avr. 2006, 04:17

au moment de la creation ou apres avec la commande SQL :
ALTER TABLE ....

la doc mysql : http://dev.mysql.com/doc/refman/5.0/fr/index.html

si tu as phpmyadmin tu peux aussi le faire directement avec lui .... choisis bien les types d'index suivant les colonnes, car mal utilisé ca peut avoir l'effet inverse et ca augmente la taille des tables ...

vu que je ne connais pas tes tables ou les requetes que tu utilises, je peux pas t'en dire plus .

Eléphant du PHP | 160 Messages

16 avr. 2006, 04:27

Si le coeur t'en dit :#

Code : Tout sélectionner

# Structure de la table 'abonnes' # CREATE TABLE abonnes ( id int(11) NOT NULL auto_increment, nom varchar(255) NOT NULL, prenom varchar(255) NOT NULL, dd date DEFAULT '0000-00-00' NOT NULL, df date DEFAULT '0000-00-00' NOT NULL, di date DEFAULT '0000-00-00' NOT NULL, dn date DEFAULT '0000-00-00' NOT NULL, tf varchar(255) NOT NULL, tp varchar(255) NOT NULL, mail varchar(255) NOT NULL, type varchar(20) NOT NULL, adresse text NOT NULL, cp varchar(255) NOT NULL, ville varchar(255) NOT NULL, pseudo varchar(255) NOT NULL, passw varchar(255) NOT NULL, profil text NOT NULL, PRIMARY KEY (id) ); # # Structure de la table 'evenements' # CREATE TABLE evenements ( id int(11) NOT NULL auto_increment, ref varchar(255) NOT NULL, nom varchar(255) NOT NULL, statut int(11) DEFAULT '0' NOT NULL, dd date DEFAULT '0000-00-00' NOT NULL, df date DEFAULT '0000-00-00' NOT NULL, hd time DEFAULT '00:00:00' NOT NULL, hf time DEFAULT '00:00:00' NOT NULL, type varchar(20) NOT NULL, commentaire text NOT NULL, description text NOT NULL, rdv varchar(255) NOT NULL, prix varchar(255) NOT NULL, maxi int(11) NOT NULL, mini int(11) NOT NULL, reserve int(11) NOT NULL, PRIMARY KEY (id) ); # # Structure de la table 'panier' # CREATE TABLE panier ( id int(11) NOT NULL auto_increment, pseudo varchar(255) NOT NULL, ref varchar(255) NOT NULL, PRIMARY KEY (id) );
Pour ce qui est de la requête :
<?
		$query = "SELECT * FROM panier,evenements WHERE panier.ref=evenements.ref AND pseudo= '".$_SESSION['pseudo']."' ORDER BY dd DESC";
Genres WHERE Livres.CodeGenre = Genres.CodeGenre;
		$result = mysql_query($query);
	if($result)
	{
	 	while($Record = mysql_fetch_object($result))
		{
?>
C'est vrai que je bricole, alors j'essaie quel est le bon usage.
Merci

Eléphant du PHP | 254 Messages

16 avr. 2006, 04:37

si tu ne fais que cette requete sur ces tables, la reponse est simple :

-deja pourquoi declarer les colonnes ID et en plus les mettre en primaire puisque tu t'en sert pas ?

-si panier.ref peut etre de type UNIQUE, n'hesite pas, sinon un INDEX suffira ... meme remarque pour evenements.ref et panier.pseudo

Eléphant du PHP | 160 Messages

16 avr. 2006, 05:10

J'utilise l'id par ailleurs, mais je me pencherai demain sur ce que tu viens de me dire. Il faut que je me penche là-dessus à tête reposée,
Merci pour tes conseils,
++