表索引——全文索引

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 表索引——全文索引

前言


全文索引主要对字符串类型建立基于分词的索引,主要是基于CHAR、VARCHAR和TEXT的字段上,以便能够更加快速地查询数据量较大的字符串类型的字段。


       全文索引以词为基础的,MySQL默认的分词是所有非字母和数字的特殊符号都是分词符。


       MySQL从3.23.23版本开始支持全文索引,MySQL5.6以前只能在存储引擎为MyISAM的数据表上创建全文索引,5.6之后InnoDB开始支持全文索引(5.7之后支持中文全文索引) 。在默认情况下,全文索引的搜索执行方式为不区分大小写,如果全文索引所关联的字段为二进制数据类型,就以区分大小写的搜索方式执行。


一、全文索引

1.创建表时定义索引


CREATE TABLE tablename(


   propname1 type1,


   propname2 type2,


   ……


   propnamen type..n,


   FULLTEXT INDEX | KEY


   [indexname] (propnamen [(length)] ) );



mysql> create database school;   #创建数据库school


mysql> use school;   #选择数据库school


mysql>create table class(id int, name varchar(128) UNIQUE, teacher varchar(64),comment varchar(1024),FULLTEXT INDEX index_comm(comment));       #创建表class, 并建立为comment 字段为全文索引


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('我是一个兵');#利用全文检索索引快速查


2.已存在的表上创建索引

方法1:执行 create 语句


在MySQL中创建全文索引除了通过SQL语句FULLTEXT INDEX来实现外,还可以通过SQL语句CREATE FULLTEXT INDEX来实现,其语法形式如下:


   CREATE FULLTEXT INDEX indexname


   ON tablename( propname1 [ ( length ) ] );


       在上述语句中,关键字CREATE FULLTEXT INDEX表示用来创建全文索引。


       如下例表已存在,可通过CREATE语句创建全文索引:

mysql> create database school;   #创建数据库school


mysql> use school;   #选择数据库school


mysql> create table class(id int, name varchar(128) UNIQUE, teacher varchar(64));       #创建表class, 并建立为id 字段索引


mysql> create FULLTEXT index index_teacher on class(teacher );  #追加全文索引


mysql> show create table class;  #查看表定义  


方法2:执行alter table 语句

除了上述两种方式来创建全文索引外,在MySQL中创建全文索引还可以通过SQL语句ALTER来实现,其语法形式如下:


   ALTER TABLE tablename


   ADD FULLTEXT INDEX|KEY indexname(propname [(length)]);


3.使用场景

根据全文索引字段进行全文检索数据:

SELECT * FROM 表名WHERE MATCH(`列名`) AGAINST('关键字');

mysql> create database school;   #创建数据库school


mysql> use school;   #选择数据库school


mysql> mysql> create table class(id int, name varchar(128) UNIQUE, teacher varchar(64),info varchar(1024),FULLTEXT INDEX index_des(info));       #创建表class, 并建立为info 字段为全文索引


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(teacher) AGAINST('我是一个兵');#根据id查询记录

二、MySQL8 中文分词支持

       配置文件my.ini(Windows 10默认路径: C:\ProgramData\MySQL\MySQL Server 8.0) 中增加如下配置项,同时重启MySQL80 服务:

mysql> create database school;   #创建数据库school


mysql> use school;   #选择数据库school


mysql> mysql> create table class(id int, name varchar(128) UNIQUE, teacher varchar(64),comment varchar(1024),FULLTEXT INDEX index_des(comment) with parser   ngram);       #创建表class, 并建立为comment 字段为全文索引


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('唐僧');#利用全文检索索引快速查询记录

总结

以上

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 关系型数据库 MySQL
mysql索引(七)唯一索引
唯一索引(UNIQUE):与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
471 0
mysql索引(七)唯一索引
|
19天前
|
存储 关系型数据库 数据库
什么是索引
【10月更文挑战第15天】什么是索引
|
6月前
|
SQL 关系型数据库 MySQL
关于索引的使用
关于索引的使用
|
存储 关系型数据库 MySQL
了解和认识索引
了解和认识索引 。
61 0
|
存储 Oracle 关系型数据库
主键索引是聚集索引还是非聚集索引
在聚簇索引中,主键索引的叶子节点存储的就是数据行本身,因此主键索引也被称为聚簇索引。在这种情况下,主键索引的物理顺序与数据行的物理顺序是一致的,这样可以提高查询性能和范围查询的效率。
129 0
表索引——唯一索引
表索引——唯一索引
|
数据库 索引
表索引——普通索引
表索引——普通索引
|
SQL 关系型数据库 MySQL
表索引——多列索引
前言 多列索引,是指在创建索引时所关联的字段不是一个字段,而是多个字段,虽然可以通过所关联的字段进行查询,但是只有查询条件中使用了所关联字段中的第一个字段,多列索引才会被使用。
|
存储 索引
表索引
表索引
112 0
|
存储 SQL 自然语言处理
mysql索引(八)全文索引
全文索引(FULLTEXT ):可用于 MyISAM 表,mysql5.6之后也可用于innodb表, 用于在一篇文章中,检索文本信息的, 针对较大的数据,生成全文索引很耗时和空间。
513 0
mysql索引(八)全文索引