Accueil > Bases de données > Les différents moteurs de stockage de MySQL: MyISAM

Les différents moteurs de stockage de MySQL: MyISAM

II. Le moteur MyISAM

  • Licence : GPL
  • Version de MySQL : Depuis la version 3.23, MyISAM a remplacé le moteur ISAM
  • Type : Moteur Non transactionnel.
  • Domaines d’application :
    – Recherche FULL-TEXT (texte intégrale).
    – Tables en lecture seule.
    – Tables de Log.
  • Information : Documentation officielle de MyISAM

II-A. Description

Depuis sa création, il est devenu le moteur par défaut de MySQL. Il a remplacé Isam en y ajoutant des extensions. En raison de sa souplesse, simplicité et rapidité, MyISAM gagne en popularité dans les applications du web.

Il est très utilisé pour le web car, comme il ne gère ni les clés étrangères, ni les transactions, il n’a pas à vérifier la validité des enregistrements. Cela permet donc un précieux gain de temps sur des tables très fréquemment ouvertes en écriture/lecture.

En effet, lorsque vous faites des suppressions sur des champs de type VARCHAR, CHAR, BLOB ou TEXT, le moteur supprime le contenu mais la place précédemment supprimée est conservée et peut être réutilisée ultérieurement.
OPTMIZE va défragmenter la table afin de gagner de la place et ainsi faciliter l’accès aux données sur cette table.

 

Sélectionnez
OPTIMIZE maTable;

Rien ne sert d’exécuter cette commande sur toutes les tables en permanence. Vous risquez de faire baisser les performances si beaucoup de connexions s’effectuent en même temps.
Cette commande doit être utilisée seulement sur des tables dont la taille évolue rapidement.

D’après ses détracteurs, MySQL ne serait pas capable de gérer les transactions.
En réalité, les personnes ayant utilisé MySQL ne savaient pas qu’il était possible de changer de moteur. Ils sont tombés sur le moteur par défaut, MyISAM, qui ne gère pas les transactions.

Une table MyISAM utilise trois fichiers :
  • maTable.FRM : Fichier de définition de la table
  • maTable.MYD : Fichier contenant les données de la table
  • maTable.MYI : Fichier d’index

II-B. Recherche FULL-TEXT (Texte Intégral)

II-B-1. Description

L’utilisation de la recherche FULL-TEXT est un des grands avantages de MyISAM.
Lorsque nous souhaitons rechercher un mot dans une table, nous pensons par défaut à l’opérateur de recherche LIKE et à ses différents jokers.

Exemple avec l’opérateur LIKE

Sélectionnez

SELECT * FROM maTable WHERE monChamp LIKE '%ma recherche%'

Cette requête nous retournera toutes les lignes où le champ « monChamp » contiendra « ma recherche ». Elle va nous retourner les résultats dans l’ordre de la table ou dans l’ordre défini par un ORDER BY. LIKE présente deux problèmes. En mode « contient », comme nous l’avons utilisé, il ne peut s’appuyer sur un index et est donc très peu efficace. De plus, il recherche des séries de caractères : par exemple, une recherche sur %bosse% donnera nom seulement bosse, mais aussi bosser, cabosser, Carabosse, etc. A l’inverse, la recherche FULL-TEXT s’appuie sur un index ad hoc et recherche des mots et non des caractères.

En effet, la requête va vous retourner les enregistrements sans distinction sur la pertinence de l’information recherchée. Si vous allez dans la page d’index d’un livre, par exemple sur l’encyclopédie des bases de données et que vous cherchez le mot « MySQL« , nous supposons que vous souhaitez tomber sur le chapitre qui en parle le plus.

MySQL, avec la recherche FULL-TEXT, a la possibilité d’effectuer une recherche sur une colonne ou un groupe de colonnes en retournant le résultat selon la pertinence du mot recherché. Dans le cas de notre livre, MySQL pourra retourner le chapitre où se trouve le plus souvent le mot « MySQL ». Les résultats seront retournés, un peu à l’instar de Google et son Ranking, par ordre de pertinence.

Vous pouvez aussi faire une recherche sur une phrase. MySQL renverra la pertinence de chaque mot. Il va encore plus loin car il exclut les mots n’ayant pas de pertinence et redondants dans la langue. Par exemple, il ne prend pas en compte les mots de longueur inférieure ou égale à 4 caractères (des mots comme « de », « la », etc. en français).

Le nombre de lettres minimal que doit comporter un mot peut être paramétré dans le fichier de configuration.

II-B-2. Exemples
Exemple d’utilisation de la recherche FULL-TEXT

Sélectionnez

CREATE TABLE `article` (
  `idArticle` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `Titre` VARCHAR(250) CHARACTER SET latin1 DEFAULT NULL,
  `Article` TEXT CHARACTER SET latin1,
  PRIMARY KEY  (`idArticle`),
  FULLTEXT KEY `Titre` (`Titre`,`Article`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
ENGINE = MyISAM;
Ajout de l’article en cours par moteur

Sélectionnez

INSERT INTO Article (Titre, Article) VALUES ('MyISAM', 'Ce moteur est une version évolué de ISAM avec des extensions en plus....');
INSERT INTO Article (Titre, Article) VALUES ('Memory', 'Les tables de type Memory stock les enregistrements dans la mémoire physique...');
INSERT INTO Article (Titre, Article) VALUES ('CSV', 'Ce type de format facilite le transport entre différentes sources ...');

MATCH considère que les mots présents dans au moins la moitié des lignes sont trop fréquents pour être pertinents.
En conséquence, la recherche FULL-TEXT ne renverra aucun résultat si la table n’a pas au moins trois lignes

Dans la requête ci-dessus, le contenu de l’article est enregistré dans la base de données. Maintenant, nous pouvons procéder à une recherche avec pertinence.

 

Sélectionnez

SELECT *, MATCH (Titre, Article) AGAINST ('base de données') AS Score FROM Article ORDER BY score DESC;
----------------------------------------------------
IdArticle | Titre     | Article                                           | Score
7         | Federated | Le moteur Federated permet de déporter...         | 0,21985759722453
6         | Exemple   | Ce type de table est assez particulier...         | 0,15944281721118
8         | InnoDB    | C'est le moteur transactionnel le plus utilisé... | 0,14023887676722
1         | MyIsam    | Ce moteur est une version évoluée d'ISAM avec...  | 0,068685997386924
2         | Memory    | Les tables de type Memory stockent les...         | 0
...

Dans le résultat de la requête, vous remarquez que le champ score indique la pertinence estimée par MySQL. Avec cette information vous pouvez renvoyer à l’utilisateur un résultat proche de ce qu’il demande.

II-B-3. Conclusion sur la recherche FULL-TEXT

La recherche FULL-TEXT permet d’avoir une approche utilisateur d’un vrai moteur de recherche tel que nous en trouvons sur le web.

L’exemple présenté dans cet article n’est qu’une faible partie de ce que MyISAM peut faire. Il y a beaucoup d’autres fonctionnalités qui peuvent être utilisées, telles que l’utilisation des expressions régulières présentes dans MySQL avec la recherche FULL-TEXT.

MySQL est capable d’effectuer une recherche par « sous-entendu » ce qui est appelé « recherche aveugle ». Si à la place de « Base de données » nous plaçons « moteur », MySQL est capable de comprendre que nous parlons de MyISAM, Memory, InnoDB, etc. Ceci via le mot-clé WITH QUERY EXPANSION.

À savoir à l’heure actuelle, seul ce moteur possède cette fonctionnalité.

Pour plus d’informations sur le FULL-TEXT

II-C. Avis

Avantages
  • Moteur rapide.
  • Possibilité d’écrire et lire en même temps sans risque de verrouillage de table.
  • Verrouillage de table manuel.
  • La mise en cache des clés.
  • Gain de place sur le disque.
  • Gain de mémoire lors des mises à jour.
  • Gestion de la recherche FULL-TEXT.
Inconvénients
  • Pas de gestion des contraintes de clés étrangères
  • Pas de gestion des transactions (pas de COMMIT / ROLLBACK possible).

II-D. Conclusion

MySQL AB a fait le choix de mettre ce moteur par défaut en raison de sa polyvalence et sa simplicité d’utilisation. La gestion de la recherche FULL-TEXT offre une grande utilité pour la création de moteurs de recherches avancés. MyISAM est donc le moteur le plus utilisé.

Print Friendly, PDF & Email

Related Post

Les commentaires sont fermés.