[Mysql] Les indexs, ça sert à quoi ?

Les indexs, ça sert à quoi ? [Mysql] - SQL/NoSQL - Programmation

Marsh Posté le 07-01-2004 à 09:27:43    

Bonjour,
Vous parlez trés souvent d'"index" sur les tables mysql dans le forum. Ca serait sympa si quelqu'un pouvait m'expliquer rapidement de quoi il s'agit. J'avoue avoir du mal à saisir.
 
Merci d'avance :)

Reply

Marsh Posté le 07-01-2004 à 09:27:43   

Reply

Marsh Posté le 07-01-2004 à 09:58:50    

Faut que tu cherches dans Google parce qu'un index ça s'explique difficilement en un post.
 
Grosso modo ça permet de faire des recherches plus vite en permettant à mysql de se créer une "table des matières" des réponses. Comme l'index dans les livres, c'est exactement le même principe... Mysql regarde dans l'index, il trouve rapidement le terme qu'il cherche et à partir de là il va le trouver très rapidement, bien plus rapidement que s'il devait chercher le terme dans les 5000 pages de son bouquin.
 
Après y a des index clustered / non clustered (encore que je crois que mysql ne gère pas la différence), y a des index par défaut sur les primary... Il y a aussi des inconvénients (l'index doit être mis à jour en cas d'update/insert donc faut les utiliser surtout dans les select), faut les mettre sur les bonnes colonnes, etc, etc...

Reply

Marsh Posté le 07-01-2004 à 13:12:26    

Nan vraiment ca me dépasse je comprend pas trop. C'est quoi l'avantage par rapport à une colonne d'id par exemple ?

Reply

Marsh Posté le 07-01-2004 à 14:22:52    

Attention: le but de l'index n'est pas de remplacer une colonne d'id. un index est là soit pour éventuellement ajouter une contrainte d'intégrité (ne pas avoir 2x le même id pour une clé primaire par exemple), soit pour accélérer les accès.  Un index bien placé peut diminuer très sensiblement le temps d'exécution d'une requête (le moteur BDD ira consulter l'index plutôt que la table si une condition porte sur le champ indexé).
 
Attention de ne pas y aller bourrin: un index prend plus de place que les données du champ qui est indexé!  Il faut donc indexer uniquement les champs critiques, et quand cela est vraiment nécessaire. Si pas de gain, pas besoin d'index.


Message édité par drasche le 07-01-2004 à 14:23:15

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 07-01-2004 à 23:17:28    

Hum, d'accord mais dans ce cas quel genre de champs indexer ? Par exemple le résumé d'un livre qui fait généralement plus de 500 caractére ? ou ca dépend pas de la taille mais du champs sur lequel est éfféctué la requete ?

Reply

Marsh Posté le 07-01-2004 à 23:26:48    

Un index permet avant tout d'accélérer les recherches.
L'idée, c'est d'isoler une (ou plusieurs) colonnes pour faire les recherches sur un volume d'information plus faible que la table entière.
 
Si tu as une table avec 10 colonne et que l'une d'entre elle est indexée, cette colonne sera recopiée à part (comme si c'était une autre table avec 1 seule colonne).
Lors d'une recherche s'appliquant sur cette colonne  (... WHERE colonne = 123), le SGBD va parcourir d'abord cet index pour évaluer la condition. Ainsi, il saura "rapidement" quelles lignes sont concernées sans avoir besoin de lire toute la table.
Bien sur, il devra ensuite accéder à la table pour récupérer toutes les infos de ces lignes, mais il pourra lire seulement les lignes utiles, pas toute la table :)  
 
En simplifiant, disons qu'il faut indexer les colonnes pas trop grosses qui apparaissent dans les WHERE.
Du moins, les plus utilisées, faut pas non plus tout indexer :/


Message édité par mrbebert le 07-01-2004 à 23:27:21
Reply

Marsh Posté le 08-01-2004 à 03:59:31    

Et pour la petite histoire, les attributs clés sont automatiquement indexés.

Reply

Marsh Posté le 08-01-2004 à 06:53:59    

matafan a écrit :

Et pour la petite histoire, les attributs clés sont automatiquement indexés.


 
ca dépend quand même du SGBD :D

Reply

Marsh Posté le 08-01-2004 à 08:23:28    

kaiska a écrit :

Bonjour,
Vous parlez trés souvent d'"index" sur les tables mysql dans le forum. Ca serait sympa si quelqu'un pouvait m'expliquer rapidement de quoi il s'agit. J'avoue avoir du mal à saisir.
 
Merci d'avance :)

http://forum.hardware.fr/hardwaref [...] tm#t604996


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 08-01-2004 à 08:24:50    

Tetedeiench a écrit :

ca dépend quand même du SGBD :D

Disons même que dans les SGBD sérieux, c'est pas le cas, n'ayons pas peur.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 08-01-2004 à 08:24:50   

Reply

Marsh Posté le 08-01-2004 à 17:02:00    

Merci beaucoup c'est plus clair maintenant :) Bon je vais indexer moi :)

Reply

Marsh Posté le 09-01-2004 à 02:54:42    

nraynaud : c'est quoi un SGBD sérieux ?

Reply

Marsh Posté le 09-01-2004 à 07:09:52    

ça comprend pas MySQL, Access, tout ce qui repose sur MS Jet (donc excel etc.), les trucs qui dépassent à peine de gestionnaire de fiches et un bon paquet de merde en barril qu'on vend ou pire donne au gogo en lui faisant croire qu'avec ça c'est le maitre de la donnée pour zéro euro.
 
ça comprend essentiellement Oracle, DB2 et tout ce qui est à peu près compatible avec la norme SQL 92. Mais qui sourtout permet de placer ses données au frais dans une relative confiance.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 09-01-2004 à 10:02:26    

bah en fait , a la difference d'une table, un index est chargé en mémoire , c est pour cela que la recherche est infiniment plus rapide. Et c est aussi pourquoi on ne peut pas indexer tous les champs : en plus de ralentir le traitement, ca reviendrait a charger toute la table en mémoire.

Reply

Marsh Posté le 09-01-2004 à 10:07:22    

xilebo a écrit :

bah en fait , a la difference d'une table, un index est chargé en mémoire , c est pour cela que la recherche est infiniment plus rapide. Et c est aussi pourquoi on ne peut pas indexer tous les champs : en plus de ralentir le traitement, ca reviendrait a charger toute la table en mémoire.

c'est bien, je vois que tu as lu mon post explicatif sur les indexs.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 09-01-2004 à 13:03:13    

oui, j'ai posté car je me souviens avoir vu PowerBuilder me générer un script de creation de BDD sous mySQL en créant des index sur la clé, et je me suis dit tiens, spa automatique sur MySQL /D

Reply

Sujets relatifs:

Leave a Replay

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