EcommerceDEV. Développement, optimisation et sécurisation des sites de commerce électronique.
arrowAccueil arrow Programmation arrow J2EE/Java(script) arrow Les indexes MySQL et leur impact sur les performances
Lundi 8 sept 2008
Nom d'utilisateur     Mot de passe      Conserver       Mot de passe perdu ?  Inscription
Menu
Accueil
A propos du site
Carte du site
Moteur de recherche
Nouvelles
Contactez-nous
Evénements
- - - - - - -
Analyse
Conception
Optimisation
Programmation
Sécurité
Produits/Services
Apr 12 2006
Les indexes MySQL et leur impact sur les performances Version imprimable Suggérer par mail
Appréciation des utilisateurs: / 1
FaibleMeilleur 
Programmation - Base de données
Ecrit par Kamal AOUDA   
12-04-2006
Les indexes MySQL et leur impact sur les performances

Les analogies qui existent entre un annuaire téléphonique et une base de données permettent de mieux comprendre ce que sont les indexes.


Supposons que l’on souhaite rechercher le numéro de téléphone d’une personne dans une table qui contient près de 30 millions d’abonnés. Si on exécute une requête comme SELECT * FROM phonebook WHERE last_name = 'person', le gestionnaire de base de données sera obligé de parcourir tous les enregistrements de la table avant de retourner le résultat. Cette technique est bien sûr inefficace. Elle dégrade les performances à mesure que le nombre d’enregistrements croît (problème classique du O(n)).

D’habitude lorsqu’on souhaite effectuer une recherche dans un annuaire papier, on se positionne directement sur le groupe de pages qui commencent avec la même lettre que celle du nom/prénom de la personne recherchée. Ce positionnement est facilité par le classement alphabétique des pages. Il permet de réduire considérablement le nombre de pages à compulser.

Les index des bases de données fonctionnent de la même manière. Par exemple si on souhaite effectuer les recherches plus rapidement sur la base du prénom on peut appliquer un index à la colonne correspondante en utilisant l’instruction ALTER :

ALTER TABLE phonebook ADD INDEX (last_name)

Après l’exécution de cette instruction, MySQL crée une liste ordonnée de tous les prénoms de la table phonebook. Avec les tables MyISAM, les indexes sont stockés dans des fichiers à part pour rendre les recherches plus rapides (en fait si la table contient 1000 lignes, la recherche sera 100 fois plus rapide qu'une lecture séquentielle ).

Il est important de noter que la création d'indexes consomme beaucoup d'espace mémoire dans la base de données. De plus leur mise à jour à chaque modification de la table peut augmenter le temps nécessaire pour réaliser des opérations d’écriture. De ce fait, il faut que la création d'indexes soit justifiée et que les colonnes auxquelles ils sont appliqués soient judicieusement choisies.

Outre la célérité des recherches, les indexes permettent également d’optimiser la performance des opérations suivantes :

* Lire des lignes dans d'autres tables lorsqu’il y a des jointures.
* Trouver les valeurs MAX() et MIN() dans une colonne.
* Trier ou grouper des lignes dans une table (exemple ORDER BY key_part_1,key_part_2).

Dans MySQL il existe plusieurs types d’indexes. Les plus utiles sont :

* Les indexes partiels : ils permettent de réduire la quantité de mémoire consommée par la création des indexes. Ainsi au lieu d’appliquer l’index à tous les caractères d’un nom/prénom il est possible de l’associer à certains caractères seulement. Dans l’exemple suivant, seuls les 4 premiers octets du prénom sont utilisés pour la création de l’index.

ALTER TABLE phonebook ADD INDEX (last_name(4)).

Après l’application de cet index une requête comme SELECT * FROM phonebook WHERE last_name = 'Jackie', retournera des résultats comme Jacky, Jackline, Jackie, Jackass. Par conséquent il faudra exécuter plus d’une requête pour retourner des résultats précis (Il s’agit donc de trouver une solution de compromis entre le nombre de requêtes à exécuter, le temps de réponse et la quantité de mémoire consommée par les index).

* Les indexes multi-colonnes : MySQL permet d’appliquer les indexes à plusieurs colonnes. Exemple :

ALTER TABLE phonebook ADD INDEX (last_name, first_name)

Ce genre d’index permet d’améliorer considérablement la vitesse d’exécution des requêtes qui portent sur toutes les colonnes indexées (dans notre exemple ces indexes donnent de bonnes performances avec une requête comme SELECT * FROM phonebook WHERE last_name = 'Jhon' AND first_name = 'Pizarelli').

Bien sûr il est possible de combiner les indexes partiels avec les indexes multi-colonnes pour réduire la quantité de mémoire consommée :

ALTER TABLE phonebook ADD INDEX (last_name(4), first_name(4))

* Les indexes FULLTEXT : ils sont utilisés pour les recherches en texte intégral uniquement avec les tables MyISAM. L'indexation se fait sur toute la largeur des colonnes de type CHAR, VARCHAR et TEXT. En règle générale, il faut toujours charger les données dans une table avant de leur appliquer les indexes FULLTEXT. La raison est que le chargement et l’écriture dans une table déjà indexée en FULLTEXT peuvent être anormalement longs.
 

Dernière mise à jour : ( 12-04-2006 )
< Précédent   Suivant >
Java-XML et oracle : E-commerce - EAI - portails d'entreprise - Applications mobiles
Java-XML et oracle : E-commerce - EAI - portails d'entreprise - Applications mobiles

Cet ouvrage montre comment tirer parti de l'offre Java-XML d'Oracle, tant au niveau de la base de données Oracle8i (drivers JDBC, conteneur EJB, ORB Corba, XSQL...), que des produits associés, outils XML-XSLT, JDeveloper, Oracle9i Application Server, etc.


L'ouvrage insiste tout particulièrement sur les problèmes d'intégration de ces technologies, de design des architectures et de scalabilité des applications. II est illustré de nombreux exemples de code et de deux études de cas, une application e-commerce construite à l'aide d'EJB et un serveur de documents XML multithread.

 

Références

 

Lien sur le site d'Amazon.

Fréderic Berque, Serge Frezefond, Ludovic Sorriaux

Titre : Java, XML et Oracle
Éditeur : Eyrolles
Collection : Solutions Développeurs
Parution : mars 2001
634 pages
ISBN : 2-212-09149-4
EAN13 : 9782212091496

Moteur de recherche
Recommander ce site
Collaboration
Téléchargements
Derniers événements
Aucun événement
Sondages

En Java, quelle la meilleure technique pour programmer un panier d’achat ?

  
Blogs Ecommerce
Blog de capitaine commerce
top

Ce site a été crée avec le CMS Mambo. Un logiciel gratuit disponible sous licence GPL.

Copyright Ecommerce DEV 2006.

Hosted by SiteGround