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.
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.
- 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.
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▲
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;
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.
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é.
II-C. Avis▲
- 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.
- 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é.