[MySQL] KEY qu'est-ce que c'est | Jointure ou petites requêtes

KEY qu'est-ce que c'est | Jointure ou petites requêtes [MySQL] - Programmation

Marsh Posté le 25-02-2002 à 21:29:49    

Bon donc mes précédentes questions n'ont pas eu bcp de succès alors je recommence autrement.
 
1. Confirmez moi que 2 index dans un même base (mais pas la même table) ne peuvent pas avoir le même nom. C'est pour être sûr et ne pas être emmerdé après que je demande.
Si c'est bien le cas comment faire avec PRIMARY KEY (ligne) puisque l'on ne donne pas de nom à l'index ! Faut-il que le nom de la ligne alors soit unique ?
Et sinon comment utilise-t-on l'index d'une ligne dans un WHERE ? Par exemple si j'ai INDEX monindex (ligne) on fait WHERE monindex="1" ou WHERE ligne="1" ?
 
2. Dans la doc MySQL je vois PRIMARY KEY, INDEX ou UNIQUE. Déjà je voudrais savoir la différence entre PRIMARY KEY et UNIQUE. Ensuite dans PHPDig dans la description des tables il y a KEY : qu'est-ce que c'est ? Un autre type d'index ?
 
3. - SELECT id_tbl2 FROM tbl1 WHERE id_tbl1="1"
... traitement PHP : boucle FOR avec chaque $id_tbl2
   - SELECT montexte FROM tbl2 WHERE id_tbl="$id_tbl2"
 
ou SELECT montexte FROM tbl1, tbl2 WHERE tbl1.id_tbl1="1" AND tbl1.id_tbl2 = tbl2.id_tbl
 
Que choisir ? Laquelle des deux est la plus rapide. Je dirais la deuxième mais je demande confirmation.
 
Merci d'avance.

Reply

Marsh Posté le 25-02-2002 à 21:29:49   

Reply

Marsh Posté le 25-02-2002 à 22:02:31    

Salut,
 
Déjà je te conseille cette URL sur MySQL :
http://www.mysql.com/doc/ (en anglais mais on peut rechercher une instruction)
http://dev.nexen.net/docs/mysql/chargement.html (en francais à télécharger)
 
Bon pour tes questions maintenant :
 
Comme tu peux le voir à cette url http://www.mysql.com/doc/C/R/CREATE_TABLE.html  
tu n'es pas obligé de nommé ton index (le fait que index_name soit entre crochet), tu peux par exemple tout simplement mettre 'INDEX (toto)' pour la colonne toto .
 
Pour PRIMARY KEY, tu n'as donc pas besoin de faire un INDEX ou un UNIQUE dessus, c'est les 2 ensembles :)
 
Pour les clause WHERE, tu ne t'occupes pas des INDEX, tu fais tout simplement 'WHERE toto=1' ou toto est encore le nom d'une colonne.
 
Pour la différence entre PRIMARY KEY et UNIQUE, en gros, PRIMARY KEY possède un INDEX et de plus on ne peut pas mettre de valeurs nulles dans une PRIMARY KEY.
PRIMARY KEY est surtout utilisé quand tu veux faire des liens entre des tables ( par exemple le login d'une table utilisateurs est en PRIMARY KEY parce que les autres tables , genre une table de messages, peuvent pointer vers cette colonne login) car la recherche d'une rangée spécifique en fonction de cette colonne est très optimisées. (oula 10 lignes pour expliquer ça... merde :D
 
Pour ta dernière question, effectivement je confirme, faire tout en MySQL sera BEAUCOUP plus rapide que de faire une partie en PHP, surtout que le PHP est tout de même quasi interprété :D
Essaie le plus souvent de faire le max du boulot dans une requête... ce sera toujours plus rapide :)
 
a+

Reply

Marsh Posté le 25-02-2002 à 23:04:41    

OK c'est très clair pour la dernière réponse ;)
 
Par contre la première je me suis trompé, je demandais la différence entre un UNIQUE INDEX et un PRIMARY KEY... j'en déduis donc qu'un UNIQUE INDEX NOT NULL == PRIMARY KEY.
 
Sinon y'a le problème des noms d'index. A quoi cela sert-il de mettre un nom si après on ne s'en sert pas ?

Reply

Marsh Posté le 25-02-2002 à 23:10:56    

J'ai trouvé : c'est le nom de l'index qui doit en fait être unique... c'est pour ça qu'il vaut mieux les nommer.
 
En fait il reste une question, est-ce que écrire dans la définition de la table :
UNIQUE champs1 CHAR(10) NOT NULL
== UNIQUE INDEX champs 1 CHAR(10) NOT NULL
Et si c'est différent, pourquoi ?

Reply

Marsh Posté le 26-02-2002 à 09:30:07    

Dost67 a écrit a écrit :

J'ai trouvé : c'est le nom de l'index qui doit en fait être unique... c'est pour ça qu'il vaut mieux les nommer.
 
En fait il reste une question, est-ce que écrire dans la définition de la table :
UNIQUE champs1 CHAR(10) NOT NULL
== UNIQUE INDEX champs 1 CHAR(10) NOT NULL
Et si c'est différent, pourquoi ?  




 
Pour le nom des INDEX, ne t'emmerde pas pour ça, tu n'en as pas besoin, c'est automatique le nom, ne le nomme pas c'est tout :)
 
Heu aussi tu ne pas faire suivre UNIQUE, ou INDEX de la définition d'une colonne... Tu déclares d'abord ta colonnes, et ensuite tu mets un UNIQUE et/ou INDEX dessus.
Sinon pour la différence, sache que avec UNIQUE, il ne crée pas d'INDEX, donc si tu utilises ce champ pour des jointures, ce ne sera pas aussi rapide qu'avec un INDEX.
Mais attention! n'utilises pas un INDEX partout... parce que ça ralentit l'insertion d'une ligne... m'enfin ça c'est si tu as des grosses grosses tables avec beaucoup d'insertion :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed