Table des matières
1. Définir l'index lors de la création de la table
2. Créer un index sur une table existante
Méthode 1 : exécuter l'instruction de création
Méthode 2 : Exécuter l'instruction alter table
2. Prise en charge de la segmentation des mots chinois MySQL8
avant-propos
L'index de texte intégral établit principalement un index basé sur des segments de mots pour le type de chaîne, principalement basé sur les champs CHAR, VARCHAR et TEXT, afin de pouvoir interroger plus rapidement les champs de type chaîne avec une grande quantité de données.
L'index de texte intégral est basé sur des mots, et la segmentation de mots par défaut de MySQL est que tous les symboles spéciaux autres que les lettres et les chiffres sont des séparateurs de mots.
MySQL prend en charge les index de texte intégral depuis la version 3.23.23. Auparavant, MySQL 5.6 ne pouvait créer des index de texte intégral que sur les tables de données dont le moteur de stockage était MyISAM. Après la version 5.6, InnoDB a commencé à prendre en charge les index de texte intégral (et après la version 5.7, il prend en charge les index de texte intégral chinois). Par défaut, le mode d'exécution de la recherche de l'index de texte intégral est insensible à la casse. Si le champ associé à l'index de texte intégral est un type de données binaire, il est exécuté dans un mode de recherche sensible à la casse.
1. Index de texte intégral
1. Définir l'index lors de la création de la table
CREATE TABLE nomtable(
propname1 type1,
propname2 type2,
……
propnamen type..n,
INDEX DU TEXTE INTÉGRAL | CLÉ
[indexname] (propname [(longueur)] ) );
mysql> créer une école de base de données ; #créer une école de base de données mysql> utiliser l'école ; #sélectionner l'école de la base de données mysql> créer une classe de table (id int, nom varchar (128) UNIQUE, enseignant varchar (64), commentaire varchar (1024), FULLTEXT INDEX index_comm ( commentaire )); # Créer une classe de table et créer un champ de commentaire en tant que - index de texte mysql> insert into class values(1,' Class 1 ','Martin',' Je suis un soldat, des gens ordinaires !'); #Insert record 1 mysql> insert into class values(2,' Class 2 ','Rock',' Ce professeur de classe est diplômé du département Tang Seng '); #Insert record 2 mysql> insert into class values(3,' Class 3 ','Janny','I'm Miss Zhang.'); #Insert record 3 mysql> select * from class where match(comment) AGAINST(' Je suis un soldat '); #Utiliser l'index de recherche en texte intégral pour interroger rapidement les enregistrements |
2. Créer un index sur une table existante
Méthode 1 : exécuter l'instruction de création
En plus de l'instruction SQL FULLTEXT INDEX pour créer un index de texte intégral dans MySQL, elle peut également être implémentée via l'instruction SQL CREATE FULLTEXT INDEX, et sa syntaxe est la suivante :
CREATE FULLTEXT INDEX indexname
ON tablename( propname1 [ ( length ) ] );
Dans l'instruction ci-dessus, le mot-clé CREATE FULLTEXT INDEX est utilisé pour créer un index de texte intégral.
L'exemple de table suivant existe déjà, vous pouvez créer un index de texte intégral via l'instruction CREATE :
mysql> créer une école de base de données ; #créer une école de base de données mysql> utiliser l'école ; #sélectionner l'école de la base de données mysql> créer une classe de table (id int, nom varchar (128) UNIQUE, enseignant varchar (64)); #Créer une classe de table et la créer en tant qu'index de champ id mysql> crée l'index FULLTEXT index_teacher sur class(teacher ) ; mysql> show create table class; #Afficher la définition de la table |
Méthode 2 : Exécuter l'instruction alter table
En plus des deux méthodes ci-dessus pour créer un index de texte intégral, la création d'un index de texte intégral dans MySQL peut également être réalisée via l'instruction SQL ALTER, et sa syntaxe est la suivante :
ALTER TABLE nom de la table
ADD FULLTEXT INDEX|KEY indexname(propname [(length)]);
3. Scénarios d'utilisation
Données de recherche de texte intégral basées sur des champs d'index de texte intégral :
SELECT * FROM table name WHERE MATCH(`column name`) AGAINST('keyword');
mysql> créer une école de base de données ; #créer une école de base de données mysql> utiliser l'école ; #sélectionner l'école de la base de données mysql> mysql> create table class(id int, name varchar(128) UNIQUE, teacher varchar(64), info varchar(1024), FULLTEXT INDEX index_des(info)); #Create a table class, and create the info field as l' index de texte intégral mysql> insert into class values(1,' Class 1 ','Martin',' Je suis un soldat, des gens ordinaires !'); #Insert record 1 mysql> insert into class values(2,' Class 2 ','Rock',' Ce professeur de classe est diplômé du département Tang Seng '); #Insert record 2 mysql> insert into class values(3,' Class 3 ','Janny','I'm Miss Zhang.'); #Insert record 3 mysql> select * from class where match(teacher) AGAINST(' Je suis un soldat '); #Query records selon id |
2. Prise en charge de la segmentation des mots chinois MySQL8
Ajoutez les éléments de configuration suivants au fichier de configuration my.ini (chemin par défaut de Windows 10 : C:\ProgramData\MySQL\MySQL Server 8.0), et redémarrez le service MySQL80 en même temps :
[mysqld]ngram_token_size=2
mysql> créer une école de base de données ; #créer une école de base de données mysql> utiliser l'école ; #sélectionner l'école de la base de données mysql> mysql> créer une classe de table (id int, nom varchar (128) UNIQUE, enseignant varchar (64), commentaire varchar (1024), FULLTEXT INDEX index_des (commentaire) avec analyseur ngram); #Créer une classe de table et la créer en tant que commentaire Le champ est indexé en texte intégral mysql> insert into class values(1,'1班','Martin','我是一个兵,来自老百姓!'); # 插入记录1 mysql> insert into class values(2,'2班','Rock','此班主任毕业自唐僧系'); # 插入记录2 mysql> insert into class values(3,'3班','Janny','I''m Miss Zhang.'); #插入记录3 mysql> select * from class where match(comment) AGAINST('百姓');#利用全文检索索引快速查询记录 mysql> select * from class where match(comment) AGAINST('唐僧');#利用全文检索索引快速查询记录 |
总结
以上