Tabla de contenido
1. Definir el índice al crear la tabla
2. Crear un índice en una tabla existente
Método 1: ejecutar la declaración de creación
Método 2: Ejecute la declaración de modificación de la tabla
2. Soporte de segmentación de palabras chinas MySQL8
prefacio
El índice de texto completo crea principalmente un índice basado en segmentos de palabras para el tipo de cadena, principalmente basado en los campos CHAR, VARCHAR y TEXT, de modo que los campos de tipo cadena con una gran cantidad de datos se pueden consultar más rápidamente. .
El índice de texto completo se basa en palabras, y la segmentación de palabras predeterminada de MySQL es que todos los símbolos especiales que no sean letras y números son separadores de palabras.
MySQL admite índices de texto completo desde la versión 3.23.23. Anteriormente, MySQL 5.6 solo podía crear índices de texto completo en tablas de datos cuyo motor de almacenamiento era MyISAM. Después de 5.6, InnoDB comenzó a admitir índices de texto completo (y después de 5.7, admite índices de texto completo en chino). De forma predeterminada, el modo de ejecución de búsqueda del índice de texto completo no distingue entre mayúsculas y minúsculas.Si el campo asociado con el índice de texto completo es un tipo de datos binario, el modo de ejecución de búsqueda distingue entre mayúsculas y minúsculas.
1. Índice de texto completo
1. Definir el índice al crear la tabla
CREAR TABLA nombretabla(
propname1 tipo1,
propname2 tipo2,
……
tipo de propnamen..n,
ÍNDICE DE TEXTO COMPLETO | LLAVE
[indexname] (propname [(longitud)] ) );
mysql> crear escuela de base de datos; #crear escuela de base de datos mysql> usar escuela; #seleccionar base de datos escuela mysql> crear clase de tabla (id int, nombre varchar (128) ÚNICO, profesor varchar (64), comentario varchar (1024), ÍNDICE DE TEXTO COMPLETO index_comm (comentario)); #Crear una clase de tabla y crear un campo de comentario como un campo completo - índice de texto mysql> insertar en valores de clase (1, ' Clase 1 ', 'Martin', '¡ Soy un soldado, de la gente común !'); #Insertar registro 1 mysql> insertar en valores de clase (2, ' Clase 2 ', 'Roca', ' Este maestro de clase se graduó del Departamento de Tang Seng '); #Insertar registro 2 mysql> insertar en valores de clase (3, ' Clase 3 ', 'Janny', 'Soy la señorita Zhang.'); # Insertar registro 3 mysql> select * from class where match(comentario) CONTRA(' Soy un soldado '); #Utilice el índice de búsqueda de texto completo para consultar registros rápidamente |
2. Crear un índice en una tabla existente
Método 1: ejecutar la declaración de creación
Además de la sentencia SQL FULLTEXT INDEX para crear un índice de texto completo en MySQL, también se puede implementar mediante la sentencia SQL CREATE FULLTEXT INDEX, y su sintaxis es la siguiente:
CREAR ÍNDICE DE TEXTO COMPLETO indexname
ON tablename( propname1 [ ( longitud ) ] );
En la declaración anterior, la palabra clave CREATE FULLTEXT INDEX se usa para crear un índice de texto completo.
La siguiente tabla de ejemplo ya existe, puede crear un índice de texto completo a través de la instrucción CREATE:
mysql> crear escuela de base de datos; #crear escuela de base de datos mysql> usar escuela; #seleccionar base de datos escuela mysql> crear clase de tabla (id int, nombre varchar (128) ÚNICO, profesor varchar (64)); #Crear clase de tabla y crearla como índice de campo de identificación mysql> crea el índice FULLTEXT index_teacher en class(teacher) ; mysql> show crear clase de tabla; #Ver definición de tabla |
Método 2: Ejecute la declaración de modificación de la tabla
Además de las dos formas anteriores de crear un índice de texto completo, también se puede crear un índice de texto completo en MySQL a través de la instrucción SQL ALTER, y su sintaxis es la siguiente:
ALTER TABLE nombre de tabla
AGREGAR ÍNDICE DE TEXTO COMPLETO | CLAVE indexname (propname [(longitud)]);
3. Escenarios de uso
Datos de búsqueda de texto completo basados en campos de índice de texto completo:
SELECT * FROM nombre de tabla WHERE MATCH(`nombre de columna`) CONTRA('palabra clave');
mysql> crear escuela de base de datos; #crear escuela de base de datos mysql> usar escuela; #seleccionar base de datos escuela mysql> mysql> create table class(id int, name varchar(128) UNIQUE, teacher varchar(64), info varchar(1024), FULLTEXT INDEX index_des(info)); #Cree una clase de tabla y cree el campo de información como el índice de texto completo mysql> insertar en valores de clase (1, ' Clase 1 ', 'Martin', '¡ Soy un soldado, de la gente común !'); #Insertar registro 1 mysql> insertar en valores de clase (2, ' Clase 2 ', 'Roca', ' Este maestro de clase se graduó del Departamento de Tang Seng '); #Insertar registro 2 mysql> insertar en valores de clase (3, ' Clase 3 ', 'Janny', 'Soy la señorita Zhang.'); # Insertar registro 3 mysql> select * from class where match(teacher) AGAINST(' Soy un soldado '); #Consultar registros según id |
2. Soporte de segmentación de palabras chinas MySQL8
Agregue los siguientes elementos de configuración al archivo de configuración my.ini (ruta predeterminada de Windows 10: C:\ProgramData\MySQL\MySQL Server 8.0) y reinicie el servicio MySQL80 al mismo tiempo:
[mysqld]ngram_token_size=2
mysql> crear escuela de base de datos; #crear escuela de base de datos mysql> usar escuela; #seleccionar base de datos escuela mysql> mysql> crear clase de tabla (id int, nombre varchar (128) ÚNICO, maestro varchar (64), comentario varchar (1024), ÍNDICE DE TEXTO COMPLETO index_des (comentario) con analizador ngram); #Crear clase de tabla y compilarla como comentario El campo está indexado en texto completo 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('唐僧');#利用全文检索索引快速查询记录 |
总结
以上