Les Index dans mysql ?!

Répondre
Lefounard
le 02/05/2005 à 22:38
Lefounard
Bonsoir,
Voila j'ai entendu parler des index dans mysql , et j'ai lut un petit peu la doc de mysql mais j'ai pas trop saisi l'interet par rapport a d'autres methodes !
En fait bon les index sont la pour trier une colonne d'un champs, si j'ai bien compris, mais quel est avantage? des SELECT plus rapides ? ensuite la doc employer le terme de préfixes ?! kesako ! merci de vos explications ou meme d'un lien vers une bonne doc !
Ciao,
I am singing in the rain , I am happy again !!
bibi
le 02/05/2005 à 23:21
bibi
Les index sont présents pour accélérer les requetes . On les met en général sur les clés des jointures .

Par exemple

SELECT * FROM a,b WHERE a.cle = b.cle

ici, on créera un index sur a.cle et sur b.cle

voila :)
commit suicide
Lefounard
le 03/05/2005 à 00:51
Lefounard
merci mais la je vois qu'une jointure ! mais les index on les ecrit pas dans les requetes SELECT ?! je comprends pas tout !
I am singing in the rain , I am happy again !!
LA GLOBULE
le 03/05/2005 à 02:09
LA GLOBULE
Non, un index ne se met pas dans un SELECT.
L'index, il faut le créer sur un attribut Y d'une table X.

L'index permet d'accélérer certains types de requetes.

Exemple :

Ta table X contient 10 000 éléments, et l'attribut Y n'est pas une clé primaire.
Si tu places un index sur X.Y, tu vas créer un genre de "table des matières" de ta table (l'index).
Ensuite, quand tu vas faire une requete sql avec Y, MySQL va regarder cette table des matières (au lieu de regarder les 10 000 éléments).

Imaginons que Y soit un truc numérique.
Ta requete SQL cherche quelque chose telle que Y > 500 et Y < 800.
Imaginons aussi que l'index permette à MySQL de découper ta table X en "zone" :
- zone 1 : Y > 0 et Y < 500
- zone 2 : Y > 500 et Y < 1000
etc...

Bref lors de la requete SQL, ton MySQL va checker l'index :
- il va lire la zone 1 (un accés BD)
- il va lire la zone 2 (un accés BD) : la, il sait qu'il est dans la bonne zone pour ce que tu cherches
- il va lire les éléments de la zone 2
(si la zone 2 contient 250 éléments, MySQL aura fait 252 accés BD, au lieu de faire 10 000 accés BD).

Voila un peu en super simplifié la notion d'index : c'est une table des matieres de ta table.

C'est comme les tables des matieres des livres : tu sais que le chapitre 'toto' est à la page 42.
Si tu veux lire ce chapitre (qui t'interesse), ben tu vas à la page 42 au lieu de lire toutes les pages avant d'arriver au chapitre 'toto'.

Naturellement, un index "occupe" de la place sur le disque dur, et non, il n'est pas bon de mettre des index partout (cela peut meme ralentir le SGBD dans certains cas).
mojorisin
le 03/05/2005 à 09:36
mojorisin
En fait il te faut mettre un index sur les champs qui te serviront dans les clauses de tes requêtes.
Trop d'index peuvent ralentir le moteur lors des recherches de même que les index sur des champs trop "volumineux".
Le but est de pouvoir optimiser tes tables et les modeliser en pensant à la manière dont tu vas les utiliser.
echo ’16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlbxq’|dc
Lefounard
le 03/05/2005 à 19:52
Lefounard
merci de vos reponses, oui effectivement on m'avait dit que trop d'index fesait effectivement un effet inverse !
I am singing in the rain , I am happy again !!
LupusMic
le 27/07/2005 à 16:34
LupusMic
On peut indiquer dans un Select qu'on souhaite utiliser ou non tel et tel index.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours