Page 1 sur 1
Optimisation requête
Posté : 16 avr. 2006, 02:52
par jpsartre
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
Posté : 16 avr. 2006, 03:26
par Lorenzo
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 !
Posté : 16 avr. 2006, 03:58
par jpsartre
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?
++
Posté : 16 avr. 2006, 04:17
par Lorenzo
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 .
Posté : 16 avr. 2006, 04:27
par jpsartre
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
Posté : 16 avr. 2006, 04:37
par Lorenzo
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
Posté : 16 avr. 2006, 05:10
par jpsartre
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,
++