Les index pour les nul(l)s

Quelques petites astuces concernant l’utilisation des index sous MySQL.

  • Les Adaptative Hash Index

Il s’agit d’un format d’index (habituellement B-Tree, binary tree) qui permet de classer les éléments par hashage. Cela a fait ses preuves en termes de rapidité, et n’est accessible que via le moteur InnoDB sur certains systèmes. Pour savoir si le votre en bénéficie, il vous suffit de taper :

SHOW INNODB STATUS;

Si vous avez une ligne contenant INSERT BUFFER AND ADAPTATIVE HASH INDEX vous pouvez utiliser ces index (...INDEX USING HASH (column)...)

  • Pas que des avantages

Trop d’index peut être néfaste à votre base. Une quantité trop importante d’index nuit à la rapidité des modifications apportées à votre table (insert, delete, update…). Enfin, veillez à n’indexer que des colonnes (ou ensemble de colonnes) qui ont une cardinalité très élevée (le nombre de valeurs uniques doit être grand).

  • Indexation sur plusieurs colonnes à faible cardinalité

Il se peut que vous ayiez à indexer un ensemble de colonnes à faible cardinalité. On pourrait alors penser à créer un index multiple sur ces colonnes : INDEX (col1, col2, col3, col4). On peut aussi passer par une petite astuce qui rend l’index plus optimisé : créer une colonne qui contient le code de hashage de l’ensemble des colonnes à indexer, et indexer cette dernière. On y gagne en place, et en performance. Les données de la colonne seront par exempleMD5(CONCAT_WS('',col1,col2,col3,col4) et on chercherait les données via le code de hashage directement.

  • Tri des lignes par défaut (MyISAM) :

MyISAM trie les lignes de ses tables, par défaut selon la clé primaire. On peut lui dire de trier ses enregistrement selon un ordre qu’on a nous-mêmes défini :

ALTER TABLE ... ORDER BY ...

Cela permet de contrôler la façon dont MySQL enregistre les enregistrements sur le disque. Cela n’a pas d’effet sur des tables InnoDB qui sont construites par rapport à l’index construit par l’intermédiaire d’un cluster.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *